Frage zu sessions
Tom1tk
- php
0 Severin Kacianka0 Tom1tk0 Thomas Luethi0 Tom
Hallo Forumler,
ich arbeite gerade an einem Script mit sessions:
<?
session_start();
print session_name()."=";
print session_id()."<br>";
print SID ;
?>
Ich habe festgestellt, dass wenn ich Cookies nicht annehme steht in SID was drin, sonst ist die Variable leer. Weiß mein Script dann, wenn ich von Seite zu Seite verlinke und nicht über die URL die SID übergebe, weiß mein Script dann, dass ich immer noch in der Session bin??
Oder muss ich folgende Zeile
<a href="link.html?<? print SID; ?>">hjblhj</a>
etwa so schreiben:
<a href="link.html?<? print session_name."=".session_id(); ?>">hjblhj</a>
Zum oberen Link:
Nach dem ? steht bei mir meistens nix drin!!! Geht das auch so?? Brauche ich den Zusatz SID??
Thanx Tom1tk
Hallo,
<?
Du solltest niemals die Short-Opening-Tags nehmen, schreibe stattdessen <?php
Ich habe festgestellt, dass wenn ich Cookies nicht annehme steht in SID was drin, sonst ist die Variable leer. Weiß mein Script dann, wenn ich von Seite zu Seite verlinke und nicht über die URL die SID übergebe, weiß mein Script dann, dass ich immer noch in der Session bin??
Wenn der GET-Parameter PHPSESSID fehlt, steht die SID im Cookie, wo ist das Problem?
Oder muss ich folgende Zeile
<a href="link.html?<? print SID; ?>">hjblhj</a>
Nein, das müsste reichen.
Nach dem ? steht bei mir meistens nix drin!!! Geht das auch so?? Brauche ich den Zusatz SID??
Du brauchst sie nur wenn Cookies deaktiviert sind.
Du solltest außerdem nachschauen welche PHP-Version du hast, und ob session_trans_id auf on oder off steht. Im ersten Fall wird die SID automatisch an Links gehängt, wenn der Client keine Cookies akzetpiert.
Vielleicht helfen dir auch http://www.dclp-faq.de/q/q-sessions-id.html und http://www.dclp-faq.de/q/q-sessions-wie.html weiter.
gruß,
Severin
Hallo nochmals,
<?
Du solltest niemals die Short-Opening-Tags nehmen, schreibe stattdessen <?php
Warum?? Auf meinem Server sind die Short-open-Tags erlaubt.
Du brauchst sie nur wenn Cookies deaktiviert sind.
Du solltest außerdem nachschauen welche PHP-Version du hast, und ob session_trans_id auf on oder off steht. Im ersten Fall wird die SID automatisch an Links gehängt, wenn der Client keine Cookies akzetpiert.
Nicht ganz... Hab ein JS-Menü.... Da brauch ich die Variable zum Anhängen. Das blickt php sonst nicht. Ich habs jetzt so gebaut:
if (SID){$sess="&".SID;}else{$sess="";}
Dann weiter unten im JS-Teil:
<? print $sess; ?> (oder eben <?php ...)
Falls $sess=="", dann wird eben nix angefügt (Wäre dann über Cookies) oder wenn SID!="", dann wird was angefügt. An die übrigen Links (<a href...) wirds automatisch angefügt.
Also, Du bist sicher dass da über Cookies geht. Ich hab noch nie mit den Dingern gearbeitet (Sind mir suspekt). Wie sicher sind Cookies gegen auslesen, wenn ich Variablen in der Session speichere (mit session_register())?? Werden diese Vars im Cookie oder auf dem Server gespeichert??
Thanx Tom1tk
Hallo,
Du solltest niemals die Short-Opening-Tags nehmen, schreibe stattdessen <?php
Warum?? Auf meinem Server sind die Short-open-Tags erlaubt.
Ja. Auf Deinem Server. Heute.
Was, wenn Du uebermorgen einen neuen Provider nehmen musst?
Oder wenn Du das Skript mal einem Freund/Kunden weitergibst?
Willst Du dann alle Skripts ausprobieren und nachbessern?
Gewoehn Dir gleich von Anfang an eine saubere, vollstaendige
Schreibweise an.
<?php ... ?>
funktioniert _ueberall_, <? ... ?> nur selten.
if (SID){$sess="&".SID;}else{$sess="";}
Das scheint fuer Deinen Zweck angemessen zu sein.
Du solltest aber isset() verwenden.
if (isset(SID)) {$sess="&".SID;}else{$sess="";}
Alternativ koennte man schreiben:
$sess=(isset(SID)) ? "&".SID : "";
Also, Du bist sicher dass da über Cookies geht. Ich hab noch nie mit den Dingern gearbeitet (Sind mir suspekt).
Mir auch ;-)
Aber Du kannst ruhig auf den Fallback vertrauen.
(Sofern er ueberhaupt eingeschaltet ist.)
Entweder werden Cookies akzeptiert, dann wird
die Session-ID (und nur die) im Cookie gespeichert,
oder eben nicht, dann kommt der Fallback zum Einsatz,
und die Session-ID wird an Links und in Formulare
automatisch eingebaut.
Wie sicher sind Cookies gegen auslesen, wenn ich Variablen in der Session speichere (mit session_register())?? Werden diese Vars im Cookie oder auf dem Server gespeichert??
Nur die Session-ID wird vom Server an den Browser
(und wieder zurueck) weitergegeben.
Der Rest wird auf dem Server gespeichert in $_SESSION.
session_register() ist veraltet.
Lies endlich die entsprechenden Kapitel:
http://www.php.net/manual/de/ref.session.php
http://www.dclp-faq.de/ch/ch-version4_session.html
Gruesse,
Thomas
P.S. Warum machst Du immer zwei Fragezeichen?
Die Kinder-Krimi-Buchreihe heisst "die drei Fragezeichen".
Nach Duden reicht eines...
Hello,
if (SID){$sess="&".SID;}else{$sess="";}
Das scheint fuer Deinen Zweck angemessen zu sein.
Du solltest aber isset() verwenden.
if (isset(SID)) {$sess="&".SID;}else{$sess="";}Alternativ koennte man schreiben:
$sess=(isset(SID)) ? "&".SID : "";
Das geht wohl in die Hose!
SID ist eine Konstante und die überprüft man mit
if( defined("SID"))
{
}
http://de.php.net/manual/de/function.defined.php
Folgendes gitl für die Arebit mit "Session-Cookies":
SID ist immer dann definiert, wenn ein Session-StartVERSUCH stattgefunden hat. Wenn session_start() erfolgreich war, also mit einer bestehenden Session verbunden werden konnte, dann ist SID leer aber definiert. Steht in SID der Sessionstring, dann wurde die Session gerade eben neu gestartet.
Wenn man nun session.tans_sid = on schaltet, wird einfach immer diese Konstante an alle Link angehängt und in alle Forms als Hidden-Variable eingebaut.
Liebe Grüße aus http://www.braunschweig.de
Tom
Moin!
Folgendes gitl für die Arebit mit "Session-Cookies":
SID ist immer dann definiert, wenn ein Session-StartVERSUCH stattgefunden hat. Wenn session_start() erfolgreich war, also mit einer bestehenden Session verbunden werden konnte, dann ist SID leer aber definiert. Steht in SID der Sessionstring, dann wurde die Session gerade eben neu gestartet.
Diese Aussage ist definitiv falsch.
SID ist dann gefüllt, wenn das Skript ohne per Cookie übermittelte Session-ID aufgerufen wurde. Punkt.
Dies ist typischerweise in zwei Situationen der Fall:
1. Das Skript wird von einem Browser das erste Mal aufgerufen. Dann wird eine neue Session-ID generiert, es wird versucht, diese als Cookie zu setzen, und sie wird in SID reingeschrieben und bei trans_sid auch automatisch an alle internen Links angehängt (solche, die nicht mit http beginnen).
2. Wenn der Browser Cookies nicht akzeptiert und folglich beim zweiten Request der Session nicht zurückschickt, wird die Session-ID anhand der URL-Information ermittelt, und die zugehörigen Daten gelesen. Alles weitere ist unter 1. beschrieben.
Wenn man nun session.tans_sid = on schaltet, wird einfach immer diese Konstante an alle Link angehängt und in alle Forms als Hidden-Variable eingebaut.
Nein, das ist so auch nicht ganz korrekt - aber nur in Details. :)
Detail 1: In Formularfelder wird SID nicht eingebaut. Wohl aber werden dort die Informationen der Session-ID eingebaut. Und zwar in der Form:
<input type="hidden" name="<?php echo session_name(); ?>" value="<?php echo session_id(); ?>">
Detail 2: Wenn man Links manuell mit SID bestücken muß, wird man typischerweise zu folgender Taktik greifen:
<a href="/link/seite.html?<?php echo SID; ?>">Link</a>
Dies führt bei leerer SID dazu, dass der Link auf ein Fragezeichen endet.
Bei automatischem Anhängen wird das Fragezeichen (oder ggf. das trennende &-Zeichen) ganz automatisch eingefügt, wenn es notwendig ist (weil SID existiert und Text enthält), ansonsten ersatzlos weggelassen.
Für das Funktionieren der Links ist das unbedeutend, aber es ist eben nicht ganz dasselbe. Und grundsätzlich kann man durch etwas mehr Programmieraufwand das automatische Verhalten von PHP auch manuell erzeugen.
- Sven Rautenberg