Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

PHPSESSID und Cookie





Frage

Hallo! Also ich bin noch PHP Anfänger und brauche deshalb mal eure Hilfe. Ich benutze ein Registrierungsscript von tecdome.com (leider kann man das Script im Moment nicht von dort runterladen, weil sie demnächst nen neues rausbringen und die Site grad umbauen :-( ). Also in dem Script werden Sessions benutzt und soweit ich das sehe und auch getestet habe keine Cookies gesetzt, sondern immer per URL übergeben. Wenn ich aber nun in meinem Browser Cookies deaktiviere bzw. auf "vorher Fragen" stelle, dann werde ich vom Browser gefragt, ob er den Cookie namens "PHPSESSID" speichern darf. Klicke ich auf ablehnen, dann kann ich mich nicht einloggen, also Script funktioniert dann nicht. Klicke ich auf zulassen, dann wird KEIN! Cookie gesetzt (oder ich bin blind und sehe ihn nicht im Cookie Ordner) und das Script funktioniert tadellos. Ich habe sämtliche Dateien des Scriptes durchsucht und nirgends steht was mit "setcookie" oder ähnliches, deshalb bin ich mir sicher, dass das Script nicht auf Cookies beruht und in deren Doku steht auch nicht, dass da cookies programmiert wurden. Hier mal der Code von einer Datei aus dem Script, wo am meisten was passiert in Sachen Session: [code] $_VAR = array_merge($_GET,$_POST); include("includes/_cfg.inc.php"); include("includes/_fnc.inc.php"); session_start(); connect(); if(!isset($_VAR["mid"])) { $_VAR["mid"] = "basic"; } include("modules/".$_VAR["mid"]."/includes/config.inc.php"); $query = "SELECT * FROM ".$cfg_tb["config"]; $result = mysql_query($query); $cfg_data = mysql_fetch_array($result); if($_VAR["pid"] == "logout") { session_destroy(); inc_header(); $tpl = get_html("logged_out"); echo $tpl; inc_footer(); exit; } if(!session_is_registered("udlogged")) { if($_VAR["mode"] == "post") { $_VAR["password"] = md5($_VAR["password"]); $query = "SELECT * FROM ".$cfg_tb["user"]." WHERE uname = '".$_VAR["uname"]."' AND password = '".$_VAR["password"]."'"; $result = mysql_query($query); $data = mysql_fetch_array($result); if(mysql_num_rows($result) == 1 && $data["active"] == "yes" || mysql_num_rows($result) == 1 && $data["class"] == "0") { if($_VAR["mid"] == "members") { $time = time(); if($data["exp"] > $time || $data["class"] == "0" || $data["class"] == "1") { $query0 = "SELECT * FROM ".$cfg_tb["fields"]; $result0 = mysql_query($query0); while($data0 = mysql_fetch_array($result0)) { $newvar = "ud"; $newvar .= $data0["name"]; session_register($newvar); $$newvar = $data[$data0["name"]]; } } else { inc_header(); $tpl = get_html("logged_exp"); echo $tpl; inc_footer(); exit; } } else { session_register("udid"); session_register("udclass"); session_register("uduname"); session_register("udemail"); $udid = $data["id"]; $udclass = $data["class"]; $uduname = $data["uname"]; $udemail = $data["email"]; } session_register("udlogged"); $udlogged = "1"; if($udclass == "0") { header("Location: setup.php"); } else { //inc_header(); if($_VAR["mid"] == "members") { $tpl = get_html("logged_in_$udclass"); } else { $tpl = get_html("logged_in"); } //echo $tpl; //inc_footer(); exit; } } else { inc_header(); $tpl = get_html("logged_error"); echo $tpl; inc_footer(); exit; } } else { inc_header(); $tpl = get_html("log_in"); echo $tpl; inc_footer(); exit; } } else { inc_header(); $tpl = get_html("logged"); echo $tpl; inc_footer(); exit; } ?> [/code] Hoffe es hilft und ihr könnt was mit anfangen und mir erklären, warum er einen Cookie setzen will, obwohl das nirgends steht. PHPSESSID ist doch irgendwie ein Default Name für Sessions oder? Wieso dann also Cookies? Bitte helft mir! Kathirn

Antwort 1 von semi

Mit session_start(); wird eine neue Session gestartet oder eine bestehende weiterverwendet. Damit wird im Response-Header ein Keks abgelegt, der die Session-ID ethält.
Dieser Keks wird clientseitig nicht gespeichert, daher siehst Du nichts im Cookie-Ordner.
Überleg Dir mal, wie sonst kann serverseitig festgestellt werden, ob es sich bei einem Zugriff immer noch um die gleiche Session handelt. Auf IP Basis kann man sowas nicht machen.
Es gibt in PHP auch noch die Möglichkeit, statt Cookies die URL zu manipulieren, habe es aber noch nie versucht (Vermutlich eine Einstellung in PHP.ini). Dann mußt du aber immer mit PHP_SELF die Links in einem Dokument erzeugen.

Gruß,
Michael


Antwort 2 von kathrin-77

Was genau ist ein Response-Header?

Verstehe ich das richtig, es wird also auf dem Webserver ein Cookie mit der Session-ID abgespeichert und von dort dann auch wieder ausgelesen? Aber wie kann er dann den Clienten wieder richtig zuordnen?

Und wieso fragt er dann, ob er einen Cookie setzen kann, wenn er es doch nicht bei mir setzt, sondern irgendwo anders speichern will?

Vielleicht könntest Du das noch mal erklären?

Kathrin

Antwort 3 von PROGSTYLE

Hallo,

ein Cookie wir nicht auf dem Server sondern auf dem Client gespeichert.

In einem Response Header stehen Informationen sie der Client sendet... Z.B. IP Adresse .. usw...

Antwort 4 von kathrin-77

>>ein Cookie wir nicht auf dem Server sondern auf dem Client gespeichert.

Aber wenn nun weder auf dem Server noch beim Clienten was gespeichert wird, wie funktioniert das dann nun genau mit der Session, ohne ein Cookies zu setzen?

Kathrin


Antwort 5 von PROGSTYLE

Hallo,

>>Aber wenn nun weder auf dem Server noch beim Clienten was gespeichert wird...

ein Cookie wird ja auf dem Client gespeichert.

______________________________________-

Aber mal etwas anderes...

ich benutze gar keine Cookies, weil viele Leute Cookies nicht akzeptieren.

Bist Du gerade in irgendeinem Chat? Könnten dann mal näher drüber Reden wie Du Deine Sache lösen kannst!

Gruss Tobias

Antwort 6 von kathrin-77

@Tobias
wenn deine e-mail Adresse oben stimmt, dann würde ich Dir meinen Nick von AIM schicken. Hast Du AIM? Will ihn ungern so öffentlich preisgeben :-)

Kathrin

Antwort 7 von semi

Es gibt Cookies die dauerhaft gespeichert werden und solche, die nur während einer Sitzung im Speicher des Browsers stehen.
Klartext: Die Cookies mit der Session-ID werden nur solange im Speicher gehalten, bis Du eine andere Webseite startest. Dies wird häufig in Online-Shops verwendet, um z.B. die Daten im Warenkorb zu verwalten.

Im Response-Header stehen die Informationen über die vom Server gesendete Seite. Status, Mime-Typ, Größe der Daten, die dem Header folgen etc. Diese Informationen werden vom Browser interpretiert und das Ergebnis wird entsprechend aufbereitet und anzeigt.
Ich würde dir empfehlen sich mit den grundlagen von CGI etwas zu beschäftigen, das spart Dir viel Ärger beim Programmieren, wenn Du weißt, was im Hintergrund vor sich geht.

Gruß,
Michael

Antwort 8 von PROGSTYLE

Ja habe ich...

Email stimmt....

Gruss Tobias