Session
Peter Mairhofer
- php
0 Tom0 Sven Rautenberg0 Tom
0 Andavos0 Thomas Luethi0 Sven Rautenberg0 Tom
Hallo,
Ich habe bis jetzt immer mit der trans-sid gearbeitet, will jetzt aber auf Cookies umsteigen. Dabei will ich prüfen, ob der Benutzer das Cookie angenommen hat oder nicht.
Wenn nicht entweder Fehlermeldung zeigen oder trans_sid aktivieren oda so.
Diese 3 Sachen gingen nicht:
if(!isset($SID))
if(!defined(SID))
if(!isset($_COOKIES['SID']))
Ich hatte diese if-Abfragen nach dem Start von session_start.
Wie überprüfe ich das?
Und wie kann ich die Lebensdauer eines Cookies auf die Maximalzeit setzen? Ich mag dem User die Möglichkeit bieten, immer eingeloggt zu bleiben. Macht man das über diese persistenten Cookies oda anders?
Danke
Peter
Hello,
if(!isset($SID))
if(!defined(SID))
if(!isset($_COOKIES['SID']))
"Diese drei Sachen" haben auch keinen Sinn, da sie nur serverseitig arbeiten. Einzig der Cookie könnte dann noch als Dialog angesehen werden, aber das nützt Dir nur, wenn Du prüfst, ob der auch zurückkommt.
Du wirst also nicht drum rumkommen, dem Client einmal einen Cookie mit ner 304 hinten dran zu schicken. Wenn der dann wieder kommt, nimmt er Cookies an.
Grüße
Tom
Moin!
Du wirst also nicht drum rumkommen, dem Client einmal einen Cookie mit ner 304 hinten dran zu schicken. Wenn der dann wieder kommt, nimmt er Cookies an.
Achtung, böse Falle: Der IIS kriegt es nicht hin, Cookies und Redirects gleichzeitig zu senden. Entweder Redirect, _oder_ Cookies (und eine Seite), aber nicht gleichzeitig,
Ist also keine allgemeingültige Sache.
- Sven Rautenberg
Hello,
Achtung, böse Falle: Der IIS kriegt es nicht hin, Cookies und Redirects gleichzeitig zu senden. Entweder Redirect, _oder_ Cookies (und eine Seite), aber nicht gleichzeitig,
Böde Falle. Wieder ein Grund mehr, keinen IIS zu benutzen. M$ baut scheinbar immer nur halbe sachen. Ihr "limit" in SQL kennt kein Offset, ...
Grüße
Tom
Hallo,
warum willst du das überprüfen?
ich kenn PHP so:
Wenn der Server keine Session Cookies akzeptiert, so hängt PHP ?PHPSESSID=... an die URL dran, alles läuft super.
Wenn der Server Session Cookies annimmt, so hängt er nichts an.
Alles läuft super.
Also warum soll man das überprüfen?
User für immer Eingelogt?
Ich glaub das geht so:
Du musst dem Besucher einen Cookie "senden", und dann überprüfst du ob der Cookie beim User gesetzt wurde.
MFG
Andavos
hi,
ich kenn PHP so:
Wenn der Server keine Session Cookies akzeptiert, so hängt PHP ?PHPSESSID=... an die URL dran, alles läuft super.
nein, zunächst einaml passiert beides:
nach dem starten der session löst php das senden des cookies an den client aus, _und_ hängt die SID an alle links an.
beim _nächsten_ request merkt php dann, ob der cookie zurückkommt - wenn ja, ist alles in butter, und es wird mit cookie-weitergabe der SID gearbeitet; wenn nicht, wird mit dem anhängen der SID weitergemacht.
Wenn der Server Session Cookies annimmt, so hängt er nichts an.
server? client :-)
gruss,
wahsaga
Moin!
warum willst du das überprüfen?
Weil man den User vielleicht auf diesen Umstand hinweisen will, anstatt ihn wieder und wieder gegen das nicht erfolgreiche Login anrennen zu lassen?
ich kenn PHP so:
Wenn der Server keine Session Cookies akzeptiert, so hängt PHP ?PHPSESSID=... an die URL dran, alles läuft super.Wenn der Server Session Cookies annimmt, so hängt er nichts an.
Alles läuft super.
Der _SERVER_ nimmt keine Cookies an. Der _setzt_ sie beim _Client_. Und der Client sendet sie zurück, wenn das Setzen erlaubt, möglich und erfolgreich war.
- Sven Rautenberg
Hallo,
Diese 3 Sachen gingen nicht:
if(!isset($SID))
if(!defined(SID))
if(!isset($_COOKIES['SID']))
Vielleicht verwechselst Du einfach die Konstante SID
(typischer Inhalt: phpsessid=123abc456xyz, siehe
http://www.usegroup.de/software/phptutorial/sessions.html#sid )
mit dem Parameter PHPSESSID?
Such mal in der Ausgabe von phpinfo() nach "session.name"
Wenn der Session-Name PHPSESSID ist, dann sollte AFAIK wenn schon
$_COOKIES['PHPSESSID'] definiert sein, und nicht $_COOKIES['SID'].
Gruesse,
Thomas
Moin!
Ich habe bis jetzt immer mit der trans-sid gearbeitet, will jetzt aber auf Cookies umsteigen. Dabei will ich prüfen, ob der Benutzer das Cookie angenommen hat oder nicht.
Das ist kein Umstieg.
trans-sid bedeutet, dass PHP automatisch an alle Links und in alle Formulare die Session-ID reinhängt, falls Cookies nicht möglich sind. Sobald ein Skript gestartet wird und feststellt, dass die Session-ID per Cookie übertragen wird, werden die Links nicht mehr verändert.
Wenn du trans-sid ausschaltest, deaktivierst du die Linkanreicherungsautomatik. Trotzdem werden (sofern das nicht anders konfiguriert ist) natürlich Cookies benutzt, und die Methode der Übermittlung per Link ist auch immer möglich - du mußt dich nur manuell drum kümmern.
Wenn nicht entweder Fehlermeldung zeigen oder trans_sid aktivieren oda so.
Ähm? Du verwechselst einiges, würde ich sagen.
Diese 3 Sachen gingen nicht:
if(!isset($SID))
if(!defined(SID))
if(!isset($_COOKIES['SID']))
Dito hier.
Es gibt eine _Konstante_ namens SID, die den an den Link anhängbaren String enthält, oder leer ist.
Konstanten werden einmal definiert und können mit der Funktion defined() auf Existenz getestet werden, nicht aber mit isset().
Da ich vermute, dass SID immer definiert wird, hilft dir das also nichts.
In den Cookies befindet sich ein Eintrag unter dem Schlüsselwert, den session_name() dir zurückgibt.
Für die Bildung von SID könnte man folgenden Ersatzcode annehmen, der innerhalb von session_start() zum Einsatz kommt:
if (!isset($_COOKIE[session_name()]))
{
define("SID",session_name()."=".session_id());
}
else
{
define("SID","");
}
Ich hatte diese if-Abfragen nach dem Start von session_start.
Tja, dreimal gezielt, und dreimal das Ziel verfehlt.
Und wie kann ich die Lebensdauer eines Cookies auf die Maximalzeit setzen? Ich mag dem User die Möglichkeit bieten, immer eingeloggt zu bleiben. Macht man das über diese persistenten Cookies oda anders?
Das dauerhafte Einloggen solltest du nicht per Session-Cookie regeln, sondern mit setcookie() feste Cookies setzen, die genau die Login-Daten enthalten (anstelle eines Formulars beispielsweise). Das Session-Cookie hingegen regelt die Zugehörigkeit der Session-Daten zur Session.
- Sven Rautenberg
Hello,
Es gibt eine _Konstante_ namens SID, die den an den Link anhängbaren String enthält, oder leer ist.
Die Konstante ist immer dann vorhanden, wenn eine Session besteht. Sie ist gefüllt, wenn die bestehende Session im selben Script begründet wurde (erstmals benutzt) und sie ist leer, wenn die Session nur fortgesetzt (wieder aufgenommen) wurde.
if (!isset($_COOKIE[session_name()]))
{
define("SID",session_name()."=".session_id());
}
else
{
define("SID","");
}
Das darf man aber so nicht benutzen. Dann gibts einen redefie-Error. Als Vorstellungsmodell, wie da mit SID funktioniert, aber brauchbar.
Grüße
Tom
Moin!
Es gibt eine _Konstante_ namens SID, die den an den Link anhängbaren String enthält, oder leer ist.
Die Konstante ist immer dann vorhanden, wenn eine Session besteht. Sie ist gefüllt, wenn die bestehende Session im selben Script begründet wurde (erstmals benutzt) und sie ist leer, wenn die Session nur fortgesetzt (wieder aufgenommen) wurde.
Nein. Die Konstante ist dann LEER, wenn session_start() ein gesetztes Session-Cookie feststellen konnte.
Niemand wird davon abgehalten, manuell ein Cookie zu manipulieren und schon beim ersten Seitenaufruf SID leer zu haben. Niemand wird davon abgehalten, das Cookie zu verweigern und damit SID immer gefüllt zu haben.
Der Tatbestand "hat Session-Cookie angenommen" kann, anstatt den Inhalt von SID zu prüfen, genausogut am Vorhandensein von $_COOKIE[session_name()] abgelesen werden.
if (!isset($_COOKIE[session_name()]))
{
define("SID",session_name()."=".session_id());
}
else
{
define("SID","");
}Das darf man aber so nicht benutzen. Dann gibts einen redefie-Error. Als Vorstellungsmodell, wie da mit SID funktioniert, aber brauchbar.
Deshalb schrieb ich ja auch:
"Für die Bildung von SID könnte man folgenden Ersatzcode annehmen, der innerhalb von session_start() zum Einsatz kommt:"
Bemerke die Verwendung der Worte "Ersatzcode" und "innerhalb von session_start()".
- Sven Rautenberg