Winsock und cookies?

logiker

Grünschnabel
Hallo,

ich suche eine Funktion, die mir Daten, die in einem Cookie stehen als Variablen in C(++) zurückgibt. Um es mal klarer auszudrücken, ich hab die Idee diesem Browsergame entnommen: Ectroverse Dort werden die login-daten in einem cookie gespeichert, dieser wird mitgesendet und der server sieht, wer eingeloggt ist. Dort wird auch winsock verwendet. Der Quellcode ist zwar auf der Seite angegeben, doch ich habe dort keine Funktion gesehen, die den Cookie ausliest. Also was ich jetzt gerne hätte ist eine Funktion die das macht, oder eine erklärung, wie man das machen kann...

Das gleiche Prinzip lässt sich auch hier wiederfinden:
http://vd.wurmlochspiel.de/
http://www.wurmlochspiel.de/
 
hmmm... kennt sich da denn keiner mit aus? Könnt ihr mir den eine andere möglichkeit sagen, wie man das machen kann, das Daten an das C-programm kommen, ohne die im URI zu haben? also es werden ja auf anfrage immer die HTML-Texte an den clienten gesendet, aber wie kann ich etwas über den Browser vom Clienten empfangen?
 
Also wenn ich das richtig verstanden habe möchtest du die Werte aus einem Cookie lesen, das sich auf dem selben Computer befindet wie das auslesende c(++)-Programm?

Wenn das der Fall ist, ist das gar nicht schwer.
Denn wie du sicher weißt, ist ein Cookie nichts weiter als eine Textdatei.
Jetzt musst du nur noch schauen wo die Cookies gespeichert werden und dann einfach den Text einlesen.

in c++ hilft dir da die include-datei <sstream> mit mit deren Funktionen aus der STL wie z.B. ffile / ifile / ofile (eines der drei Dinger wird es sein).

Sollte es andersherum sein und du möchtest einen Server einrichten auf den du tatsächlich auch c(++)-programme ausführen kannst um dann die eingehenden Cookiedaten in dein Programm einzulesen ist das ebenfalls nicht schwer.
Denn in diesem Fall ist ja wohl auch die Internetseite welche den Cookie anfragt von dir.
Wenn die Seite dann die daten hat, schreibst du die dann in eine datei welche das c(++)programm dann ausliest oder du sendest die Daten sofort als Komandozeilenparameter an das Programm.

Wie dies jedoch geht weiß ich nicht, kenne mich halt nicht mit php oder entsprechenden serverseitigen sprachen aus.
Sollten Scriptsprachen für die Internetprogrammierung nicht dazu in der Lage sein exe-programme zu starten und komandozeilenparameter zu übergeben (hab keine Ahnung davon), kannst du via socketprogrammierung natürlich darauf warten bis eine Verbindung eingegangen ist und dies als Signal benutzen eine bestimmte Datei auszulesen.

Oder du verarbeitest die einkommenden Daten direkt, doch dafür müsstest du ja wissen wie man die empängt, aber da dies ja genau dein problem war und ich keien Ahnung von der Internetprogrammierung habe, kannst du ja ein wenig mit dem Umweg über die Zwischendatei experimentieren (musst da auf die Synchronisation achten, dass die datenempfangede Internetseite nicht versucht in die Datei zu schreiben während dein c++-programm das Ding offen hat.

Hier solltest du dir aber überlegen ob es nicht besser ist vollständig auf irgendeine scriptsprache wie php oder sowas umsteigst.

Ansonsten gibt es schon son paar Kits die man verwenden kann um c++ zu verwenden.
Mal ein Paar Beispiele:
http://www.webtoolkit.eu/wt/#example:0;main:0
http://www.kharchi.eu/wiki/doku.php?id=cpp:web:basics

Doch von dem was ich so gehört hatte, soll das hier das beste Zeug sein
http://www.tntnet.org/ <--- ist aber so weit ich wieß für Linux und nicht für Windows, daher nix mit Winsok, musst schon Barkleysockets nehmen oder wie das unter Linux auch immer hießen mag.
Hit Hilfe dieses Zusatzkram kann man dank des Parsers (?) c++ direkt in html-seiten einbetten.
Hier ein Beispielcode für einen Taschenrechner

Code:
<%args>
double arg1 = 0;     // typed parameter with default value
double arg2 = 0;     // typed parameter with default value
char op = ' ';       // typed parameter with default value
method = "post";     // parameter with default type std::string
</%args>

<{  // <= this starts a c++-processing-block

  double result = 0.0;

  bool result_ok = true;
  switch (op)
  {
    case '+': result = arg1 + arg2; break;
    case '-': result = arg1 - arg2; break;
    case '*': result = arg1 * arg2; break;
    case '/': result = arg1 / arg2; break;
    default: result_ok = false;
  }

}> <# <= this terminates a c++-processing-block (and this is a ecpp-comment) #>

<html>
 <head>
  <title>Calculator</title>
 </head>
 <body bgcolor=#ffffcc>
  <h1>Tommi's Tnt-Calculator</h1>

  <form method=<$method$>>   <# print value of a c++-variable #>

   <# you can output other types as well - arg1 and arg2 are of type double.
      They just need a outputstream-operator #>
   <input type="text" name="arg1" value="<$arg1$>"> <br>
   <input type="text" name="arg2" value="<$arg2$>"> <br>
   <input type="submit" name="op" value="+">
   <input type="submit" name="op" value="-">
   <input type="submit" name="op" value="*">
   <input type="submit" name="op" value="/">

% if (method == "get") {    // '%' in the first column makes a c++-one-liner

   <input type=hidden name=method value=get>

% }

  </form>

% if (result_ok) {

  <hr>
  <$arg1$> <$op$> <$arg2$> = <$result$>

% }

 </body>
</html>
 
Zuletzt bearbeitet:
Danke für die Antwort, aber das ist nicht ganz das was ich meine, da das Programm einmal gestartet werden soll und dann nicht geschlossen werden soll. Das Programm empfängt halt immer wieder Get-Anfragen und gibt daszu eine HTML-Seite aus (klappt schon) nur wo ich nicht weiter komme ist die Stelle mit den Formularen, wenn ich die nicht im URI stehen haben will, weiß ich nicht, wie ich das machen kann. Gibt es vielleicht eine Javascript-funktion, die die Informationen so an die nächste Seite weiterschickt, dass sie in der Get-Anfrage stehen?
 
Cookies werden mit im HTTP Header gesendet, sowohl die Cookies die vom Server an den Client gesendet werden damit sie gesetzt werden können, als auch die vom Client an den Server, als gesetzt gesendet werden.
hier der link zu Wikipedia:
http://de.wikipedia.org/wiki/HTTP-Cookie#Aufbau
um das alles zu bewerkstelligen, muss man sich einigermaßen mit dem HTTP-Protokoll auskennen, wenn du das mit sockets machen willst.

mfg
Gene
 
Zurück