sessions
Timo
- php
0 Sven Rautenberg0 Juan0 wahsaga0 Problembär0 Timo
hallo zusammen!
ich habe ein problem und weiß keinen so rechten lösungsansatz.
ich habe eine anmeldemaske in der ich benutzer und passwort eintrage und diese in der datenbank vergleiche. wenn die daten zutreffend sind, dann starte ich eine session und schreibe mit der funktion session_id() die sid in eine variable. danach includiere ich eine weitere php datei und vergleiche die sid in der variablen mit der funktion session_id(). dies geht in diesem falle gut, da sich ja durch das include das zweite script eigentlich im ersten befindet. nun gebe ich in dem script die sid mit einem link (also get) an ein anderes (nicht includiertes) script weiter und dort möchte ich die sid, die ich mit der url mitgegeben habe, mit der sid vom server vergleichen, doch wenn ich die funktion session_id() benutze ist keine sid vorhanden.
die sid muss doch auf dem server vorhanden sein! wie komme ich an die sid ran?
danke schonmal im vorraus.
p.s.: ich hoffe ich habs einigermaßen verständlich geschrieben. :-)
Moin!
ich habe ein problem und weiß keinen so rechten lösungsansatz.
Und ich verstehe dein Problem nicht. Kannst du das nochmal genauer beschreiben?
Aber ich kommentiere erstmal dein Vorgehen:
ich habe eine anmeldemaske
Ein HTML-Formular?
in der ich benutzer und passwort eintrage und diese in der datenbank vergleiche. wenn die daten zutreffend sind, dann starte ich eine session
Warum erst jetzt. Starte grundsätzlich eine Session. Wenn der Benutzer sich einloggt, dann speichere diese Information im Session-Array, indem du z.B. Benutzer und Passwort speicherst, oder die aus der Datenbank ermittelten Rechte ins Session-Array schreibst.
und schreibe mit der funktion session_id() die sid in eine variable.
Wozu das? PHP verwaltet die Session-ID prima von ganz alleine. Und das Session-Array $_SESSION wird auch automatisch wieder neu geladen und mit den bisher darin gespeicherten Werten belegt, wenn auf einer neuen PHP-Seite wieder session_start() aufgerufen wird - vollautomatisch für die richtige Session-ID.
danach includiere ich eine weitere php datei und vergleiche die sid in der variablen mit der funktion session_id().
Wozu?
dies geht in diesem falle gut, da sich ja durch das include das zweite script eigentlich im ersten befindet. nun gebe ich in dem script die sid mit einem link (also get) an ein anderes (nicht includiertes) script weiter und dort möchte ich die sid, die ich mit der url mitgegeben habe, mit der sid vom server vergleichen, doch wenn ich die funktion session_id() benutze ist keine sid vorhanden.
Was bedeutet bei dir "sid". Es gibt eine vordefinierte Konstante SID (Großbuchstaben!), welche einen Textstring der Form "sessionname=sessionid" enthält, wenn PHP festgestellt hat, dass der Browser kein Cookie mit diesen Daten gesendet hat.
Startest du die Session auf jeder Folgeseite erneut?
die sid muss doch auf dem server vorhanden sein! wie komme ich an die sid ran?
Wie gesagt: Die Session verwaltet PHP von ganz alleine. Du benötigst zwingend nur auf jeder Seite den Aufruf von session_start(), und alle Session-Werte speicherst du im Array $_SESSION (also beispielsweise so: $_SESSION['user'] = $_POST['benutzername'], wenn ein POST-Formular mit dem Formularfeld "benutzername" ankommt - der Session-Arraybezeichner und der Variablenname müssen nicht identisch sein).
Manche aufwendigeren Konstruktionen erfordern dann (aber selten) den Aufruf von session_id(), session_name() oder sonstigen Session-Funktionen. Ganz unterlassen solltest du unbedingt den Aufruf von session_register(), um eine Variable zur Session-Variablen zu machen. Benutze ausschließlich den Zugriff auf $_SESSION, alles andere ergibt Müll und Konfusion.
- Sven Rautenberg
Hi,
p.s.: ich hoffe ich habs einigermaßen verständlich geschrieben. :-)
so recht verstanden habe ich es nicht, aber ein kurze Anmerkung möchte ich trotzdem dazu abgeben:
Rufst du in dem zweiten Skript session_start() auf?
Das musst du nämlich erst aufrufen, damit du mit der Session arbeiten kannst.
MfG,
Juan
hi,
wenn die daten zutreffend sind, dann starte ich eine session und schreibe mit der funktion session_id() die sid in eine variable. danach includiere ich eine weitere php datei und vergleiche die sid in der variablen mit der funktion session_id(). dies geht in diesem falle gut, da sich ja durch das include das zweite script eigentlich im ersten befindet.
Und wozu soll dieser Vergleich gut sein?
nun gebe ich in dem script die sid mit einem link (also get) an ein anderes (nicht includiertes) script weiter und dort möchte ich die sid, die ich mit der url mitgegeben habe, mit der sid vom server vergleichen,
Und wozu soll dieser Vergleich gut sein?
(Und was soll die "sid vom Server" sein?)
p.s.: ich hoffe ich habs einigermaßen verständlich geschrieben. :-)
Nein, was du _erreichen_ willst, ist absolut unklar geblieben.
Wenn du Sessions richtig™ implementiert hast, dann interessiert dich in deinen Scripten die SID eigentlich überhaupt nicht mehr - per Default handelt PHP das alles, und alles was du noch tun musst, ist Daten in die Session hineingegeben und von dort zur weiteren Verwendung wieder auslesen.
gruß,
wahsaga
Hi,
p.s.: ich hoffe ich habs einigermaßen verständlich geschrieben. :-)
Nein, was du _erreichen_ willst, ist absolut unklar geblieben.
der will im übertragenden Sinne in eine PHP-Sitzung einsteigen und zwar mit einem zweiten HTTP-Request, der in einer neuen Browserinstanz oder in einem neuen Tab gestartet wird.
Um dieses Ziel zu erreichen will er in die PHP-Sitzungsverwaltung, also die SessionID per HTTP-GET übertragen und dann abgleichen.
Problembär
Hi,
p.s.: ich hoffe ich habs einigermaßen verständlich geschrieben. :-)
Nein, was du _erreichen_ willst, ist absolut unklar geblieben.
der will im übertragenden Sinne in eine PHP-Sitzung einsteigen und zwar mit einem zweiten HTTP-Request, der in einer neuen Browserinstanz oder in einem neuen Tab gestartet wird.
Um dieses Ziel zu erreichen will er in die PHP-Sitzungsverwaltung, also die SessionID per HTTP-GET übertragen und dann abgleichen.
Problembär
genau das wars was ich gemeint habe! ich habe nicht gewusst, dass ich wieder session_start() machen muss!
danke für die hilfe!