php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.10.2007, 22:32  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard Sessions, wie funktioniert das eigentlich genau?

Hallo,

ich bin ja nun schon eine ganze Weile dabei und habe mir nun auch einiges zum Thema durchgelesen, aber irgendwie habe ich das Gefühl, dass da irgendwo ein Denkfehler ist oder mir da noch ein paar Fragen offen geblieben sind.

Wie gesagt es geht um das Thema Sessions.

Wenn ich innerhalb eines PHP Skripts
$_SESSION['var'] = $var;
schreibe, wird dann für jeden User, der das Skript aufruft und diesen Wert in die Session schreibt ein unterschiedlicher Wert gespeichert oder muss man das in irgendeiner Form vorher festlegen? Wie geht das genau von statten? Wie kommunizieren Server und PHP genau um dem Clienten den jeweiligen Wert zum Beispiel beim Auslesen zurückzugeben? Kann man auf Daten in der Session bezüglich eines Users zugreifen, ohne dass man der User ist?

Also Fragen über Fragen. Wenn ich in diese Erklärungen zu Sessions sehen, geht da aus meiner Sicht nichts draus hervor, was meine Fragen beantwortet. Mag ja auch sein, dass ich da irgendwie zu kompliziert denke?

Viele Grüße
Tine
tinchen ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 07.10.2007, 23:25  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Hi Tinchen,

ohne Garantie für Korrektheit...

Zu jeder Session gehört eine eindeutige Session-ID. Diese wird per Cookie beim Besucher hinterlegt oder als Parameter an die URL angehängt.
Damit kannst Du verschiedene Besucher unterscheiden bzw. kriegt jeder seinen eigenen Wert zugewiesen.

Im Hintergrund werden alle Daten, die zu der Session gehören in Dateien oder in einer Datenbank gespeichert. Darum musst Du Dich normalerweise nicht kümmern. Aber am Anfang des Scripts musst Du session_start() aufrufen. Sonst kannst Du nicht drauf zugreifen.

Die Session wird dabei natürlich nur auf dem Server gespeichert, wo PHP läuft. Der Client kriegt davon nichts mit. Nur was Dein Script draus macht, kriegt der geliefert.

Damit kann man normalerweise auch nicht auf andere Sessions zugreifen.

Wenn man allerdings eine andere gültige Session-ID findet könnte man sich als anderer Besucher ausgeben. Aber an die ID muss man erstmal ran kommen.

Gruß
Gerhard
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 08.10.2007, 00:30  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard Re: Sessions, wie funktioniert das eigentlich genau?

Eigentlich werden alle deine Fragen hier beantwortet:
http://de.php.net/manual/de/ref.session.php
Zergling-new ist offline  
Alt 08.10.2007, 02:14  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ich finde den Verweis aufs Handbuch nicht so recht hilfreich, irgendwie wird da das Pferd von hinten aufgezäumt. Ehrlich gesagt habe ich anfangs auch etwas gebraucht, um die Session Funktionalität richtig zu kapieren. In kurzen Worten:

Da php eine serverbasierte Sprache ist und die Kommunikation mit dem Browser des Users wie für Server-Client Kommunikation üblich, für http typisch zustandslos erfolgt - was bedeutet, dass für jede Datenübertragung eine eigene Verbindung hergestellt und nach Erfolg wieder verworfen wird - kann es nicht möglich sein, eine bestimmte Information über mehrere Seitenaufrufe zu halten. Selbst wenn der Server eine ihm übersandte Menge Daten in einer Datei oder Datenbank speichert, kann er bei einer anschließend erfolgenden Anfrage auf diese Daten nicht feststellen, ob dieser Request vom selben Client oder von einem anderen her erfolgt. Die Daten müssen also mit einer eindeutigen ID verknüpft werden, die dem Server beim jeweiligen Request mit übermittelt wird (und anhand derer er den Client sozusagen wiedererkennt). Würde ein x-beliebiger anderer Client dieselbe ID bei einer Anfrage mitsenden, so erhielte er die Daten also ebenso wie der echte Gesprächspartner (Session riding).
Als gute Möglichkeit für eine Übergabe der sog. Session-ID eignet sich die Speicherung in Cookies, da der Browser die darin enthaltenen Daten ohnehin automatisch bei jedem Seitenaufruf mitsendet. Aber auch eine Übergabe per URL Parameter ist eine Möglichkeit.

Sessions sind also sozusagen ein abstraktes Speicherkonzept, das anhand einer ID-Übermittlung funktioniert. Alle gewünschten vorzuhaltenenn Inhalte müssen über Ihren Variablennamen registriert werden (das ist auch über den Zugriff auf die superglobale $_SESSION möglich). Dem Session Mechanismus wird also mitgeteilt, welche Daten er am Scriptende speichern soll. Bei Scriptaufruf werden alle im zugehörigen Speicherplatz enthaltenen Daten unter dem dort hinterlegten Schlüssel als gleichnamige Variable bereitgestellt.

Das war so einigermaßen das Wesentliche.
nikosch ist gerade online  
Alt 08.10.2007, 09:52  
there's only one psycho
 
Benutzerbild von PsychoEagle
 
Registriert seit: 21.08.2007
Beiträge: 1.283
PHP-Kenntnisse:
Anfänger
PsychoEagle ist ein sehr geschätzer MenschPsychoEagle ist ein sehr geschätzer MenschPsychoEagle ist ein sehr geschätzer Mensch
PsychoEagle eine Nachricht über ICQ schicken PsychoEagle eine Nachricht über Skype™ schicken
Standard

Ich hatte mal das Problem bei ner Seite, dass Google die Seite mit der Session ID aufgelistet hatte, und jeder der über Google kam, war als ein bestimmter Kunde eingeloggt. Das war nicht so toll.

Also Sessions kann man "klauen" wenn man eine gültige ID besitzt, und wenn bei deinem Webspace / Server die Session nicht ablaufen kann, kann das ein großes Sicherheitsrisiko sein.

Deshalb ist es auch immer recht sinnvoll, sich auszuloggen (mit logout)

Grüße
Da Psy
__________________
"Weaseling out of things is important to learn. It's what separates us from the animals ... except the weasel." (Homer J. Simpson)
PsychoEagle ist offline  
Alt 08.10.2007, 11:13  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Demnach ist also die Session in gewisser Weise an Cookie oder URL Parameter gebunden. Der Cookie wird also mit dem Namen PHPSESSID, sofern nicht anders angegeben gespeichert. Wenn ich das nun richtig verstanden habe ist das Anhängen des URL Parameters zum Beispiel als sid etc. optional. Heißt also auch, dass wenn clientseitig keine Cookies gesetzt werden können - warum auch immer - die Session nicht mehr richtig funktioniert?

Wenn man nun hinginge und die Session ID datenbankseitig speichere und einen Timestamp vergebe, wann die Session beendet werden soll (was auch serverseitig geht) um dann nach Ablauf der Zeit eine bestimmte Session eines Users zu löschen, habe ich in der Doku immer noch keinen Ansatz gefunden wie oder ob das überhaupt geht. Also kann man per PHP auf eine bestimmten SessionEintrag mit der ID xyz zugreifen und diese löschen/beenden etc.

Zudem stelle ich mir die Frage, ob die Arbeit einer Session nicht auch in gewisser Weise von einem Objekt übernommer werden kann. Dieses Objekt kann ja auch über einen Laufzeitkarakter verfügen und steht dem User zum Beispiel nach einer Anmeldung in bestimmter Weise zur Verfügung. Das so zu händeln ist sicherlich nicht immer sinnvoll aber doch möglich. So könnte man das Ganze noch mit Cookie und Datenbank aufbessern.

Um über so etwas nachdenken zu können, muss man aber erst einmal verstehen, wie die Session überhaupt tickt. Wenn ich dann in der Doku lese:
>>Einem Besucher wird beim Aufruf Ihrer Website eine eindeutige ID, die sogenannte Session-ID, zugeordnet.<<
stellte sich mir sofort die Frage wie. Ist ja gut, dass Session Cookies automatisch geschrieben werden, aber es könnte ja genauso sein, dass man sich um eine solche Verwaltung noch selbst kümmern muss. Wenn man es weiß, dann ist es sicherlich jedem klar, aber wenn nicht, empfinde ich das nicht als sehr eindeutig. Da möchte ich an vielen Stellen ständig fragen: Wie? Automatisch? Geht das auch anders?

Vielen Dank für eure Antworten.
Grüße
Tine
tinchen ist offline  
Alt 08.10.2007, 13:12  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

zu 1/ Sessions beschränken sich nicht auf Cookies. Du kannst stets auch mit URL oder POST Parametern arbeiten. Wie oben beschrieben mußt Du dem Server nur quasi per ID mitteilen, welche Session er "raussuchen" soll.
Das Problem bei GET Parametern ist eben das von PsychoEagle beschriebene: SessionIDs finden sich in Logfiles, Cachespeichern, Googlelinks und werden für Phishing Attacken benutzt.

zu 2/ Standardmäßig verwalten die Session Funktionen die Daten in Dateien im Filesystem. Um mit Sessions in der DB zu arbeiten, werden mit session_set_save_handler () die Zugriffsfunktionen überschrieben (neu gesetzt).

zu 3/ Denk nochmal drüber nach. Sobald das Objekt sich irgendein Datum merken soll, muss wieder serialisiert werden oder über einen sonstigen Mechanismus der Datensatz an den entspr. User gebunden werden. IP's sind dafür ungeeignet und Cookies nur wenn der Browser sie speichert. Zudem kann es auch gewünscht sein, dass Daten nicht veränderbar sind (was in einem Cookie ohne weiteres möglich wäre) und deshalb auf dem Server gespeichert werden müssen.

zu 4/ Man kann es etwa so runterbrechen: session_start () sagt dem System, du möchtest die Session Funktionalität nutzen. Wurde beim entspr. Request ein Parameter übermittelt, der dem Setting für den Identifier entspricht, wird dieser als vorhandene Session interpretiert, ob nun schon Daten hinterlegt sind oder nicht. Ansonsten wird ein neuer leerer Datensatz erstellt und unter der ID füür die Folgeaufrufe gespeichert. (Genau gesagt werden Session Daten erst mit dem Eintrag des ersten Wertes physisch gespeichert). Wie gesagt, ich finde das Manual machnmal auch etwas mager. Aber zu diesen Mechanismen findest Du auch andere Quellen im Netz.

zu 5/ Gerne.
nikosch ist gerade online  
Alt 08.10.2007, 15:06  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von tinchen
Demnach ist also die Session in gewisser Weise an Cookie oder URL Parameter gebunden.
Cookie und URL sind nur die Träger des Schlüssel, aber ja.

Zitat:
Zitat von tinchen
Der Cookie wird also mit dem Namen PHPSESSID, sofern nicht anders angegeben gespeichert. Wenn ich das nun richtig verstanden habe ist das Anhängen des URL Parameters zum Beispiel als sid etc. optional. Heißt also auch, dass wenn clientseitig keine Cookies gesetzt werden können - warum auch immer - die Session nicht mehr richtig funktioniert?
Nicht optional, sondern vielmehr alternativ. Wenn das Cookie-Setzen nicht klappt, dann passiert es eben per URL-Rewrite, auch das wird automatisch durchgeführt, siehe "url_rewriter.tags". Allerdings vertrau ich der Technik nicht so ganz. Deaktivier hier mal Cookies im Forum, es wird dann zwar eine Session-ID per URL übergeben, es funktioniert aber trotzdem nicht.

Probleme gibts mit der URL-übergebenen ID, wenn du Links mit JavaScript erzeugst, da musst die Session-ID samt Schlüssel und Wert selbst dranhängen.

Zitat:
Zitat von tinchen
Wenn man nun hinginge und die Session ID datenbankseitig speichere und einen Timestamp vergebe, wann die Session beendet werden soll (was auch serverseitig geht) um dann nach Ablauf der Zeit eine bestimmte Session eines Users zu löschen, habe ich in der Doku immer noch keinen Ansatz gefunden wie oder ob das überhaupt geht.
Auf den Garbage-Collector kannst du dich nicht verlassen.
http://de.php.net/session_destroy
macht auch nicht immer das was es soll, manchmal kann man sich ausloggen und mit History-Back doch wieder zurück und ist immernoch (oder wieder?) eingeloggt.

Mit
http://de.php.net/manual/de/function...ve-handler.php
kannst du dir eben einen eigenen Handler schreiben, ist nicht einmal schwierig. Das Löschen musst du jedoch manuell per Timestamp-Vergleich durchführen. Heißt: Speicher bei jeder Verwendung den Timestamp in die Session; Prüf jetzt vor jeder Verwendung der Session, ob der Timestamp + Zeit seither <= erlaubte Idle-Zeit ist. Wenn nicht, ausloggen!


Zitat:
Zitat von tinchen
Zudem stelle ich mir die Frage, ob die Arbeit einer Session nicht auch in gewisser Weise von einem Objekt übernommer werden kann. Dieses Objekt kann ja auch über einen Laufzeitkarakter verfügen und steht dem User zum Beispiel nach einer Anmeldung in bestimmter Weise zur Verfügung. Das so zu händeln ist sicherlich nicht immer sinnvoll aber doch möglich. So könnte man das Ganze noch mit Cookie und Datenbank aufbessern.
Wozu, ich meine es geht garnicht einfacher als bisher, du kannst ja sogar session.auto_start auf 1 stellen, dann kannst du sofort auf $_SESSION zugreifen, weniger Code geht nicht. Alles was du jetzt noch an Code oder Objekten dazubläßt, wird dir das Handling nur verkomplizieren.

Und wie gesagt, das Session-Handling über eine Datenbank kannst du mit dem Session-Save-Handler ja selbst erstellen. Aber verwende den session_set_save_handler() und versuch nicht das Session-Handling mit eigenen Objekten nachzubauen.


Zitat:
Zitat von tinchen
Ist ja gut, dass Session Cookies automatisch geschrieben werden, aber es könnte ja genauso sein, dass man sich um eine solche Verwaltung noch selbst kümmern muss. Wenn man es weiß, dann ist es sicherlich jedem klar, aber wenn nicht, empfinde ich das nicht als sehr eindeutig. Da möchte ich an vielen Stellen ständig fragen: Wie? Automatisch? Geht das auch anders?
Du hast die Session-Seite nicht durchgelesen oder? Am Ende ist ein Beispiel, einfach mal testen und anwenden, sonst machen die Fragen nach dem Eingemachten noch nicht wirklich Sinn
Zergling-new ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Session funktioniert nicht bei session.use_cookies = Off Quagga PHP Tipps 2007 13 13.01.2007 18:27
Session funktioniert im IE nicht, Firefox ohne Probleme havok PHP Tipps 2006 7 14.08.2006 14:05
Weder Update noch Insert funktioniert... MessengerNews! Datenbanken 3 31.07.2006 08:39
Sessions verfallen sofort der.Chris PHP Tipps 2006 4 10.01.2006 18:46
Nach Einfügugng der Sessions funktioniert mein Program nicht PHP-Fortgeschrittene 1 02.10.2005 06:13
Cookies &amp;amp; Sessions. Seite funktioniert nur mit Reload PHP-Fortgeschrittene 4 18.09.2005 00:48
Sessions Probleme nach Server-umzug PHP Tipps 2005-2 7 14.09.2005 15:29
Kontakrformular funktioniert nur zum Teil PHP Tipps 2005-2 12 18.07.2005 11:24
Sessions! DER_Brain PHP Tipps 2005-2 5 30.06.2005 14:51
2 Sessions? PHP Tipps 2005 5 29.04.2005 19:04
sessions: registrieren funktioniert nur nach reload PHP-Fortgeschrittene 2 03.11.2004 18:17
sessions machen mich wahnsinnig PHP Tipps 2004 8 18.08.2004 18:19
Session funktioniert nicht PHP Tipps 2004 3 15.08.2004 13:08
[Erledigt] Usermanagement mit Sessions - Sicherheitsprobleme ? PHP Tipps 2004 0 30.06.2004 09:49
Sessions, sessions und nochmal sessions PHP-Fortgeschrittene 0 06.06.2004 00:36

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
wie funktionieren sessions, wie funktioniert php session, wie funktioniert eine session, wie funktioniert session php, wie funktioniert session, was genau ist eine session?, wie funktionieren php sessions, sessions wie funktionieren, sessions an url gebunden, wie funktionieren die sessions, wie geht eine session, wie funktioniert session genau, wie funktionieren datenbank sessions, wie funktionnieren sessions, bestimmte user löschen die per session username eingeloggt sind, php data \andere sessions\, wie funktioniert ein session, datum serialisiert php, php session_destroy scriptende löscht variable, wie funktioniert eine session#

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:09 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.