Session Problem, 2 verschiedene Session?
Herbert
- php
Hallo wer kann mir helfen; mache ich einen großen Fehler oder sind Sessions für soche Sachen nicht geeignet.
habe ein Programm mit session start , register usw. erstellt
im nächsten Unterprogramm arbeite ich mit den Daten weiter,
ändern usw. klappt alles wunderbar.
Aber nun:
wenn ich das Programm in einem 2. Browserfenster nochmal vollkommen neu starte und dort in dem Unterprogramm mit sessionstart die Session öffne ( ?? welche wird da eigentlich geöffnet ?? ) bekomme ich Daten von der 1. Session ( die ja noch aktiv ist)
Wo liegt mein Denkfehler ?
Arbeite mit Provider 1und1, mysql-DB,
und verwende nur session start()
(nichts mit session-id oder get oder cookie oder so)
Kann man eigentlich für jedes Prgramm eine eigene vollkommen unabhängige Session erzeugen? Wenn ja, wie geht das ?
bzw. wie gibt man die eindeutige Zuordnung an das Unterprogramm weiter ?
Es kann ja auch mal vorkommen dass mehrere PHP-Anwendungen in verschiedenen Browserfenstern laufen (zb. Adressverwaltung und nebenbei eine Std. Erfassung)
Bin um jeden ( noch so kleinen ) Tip dankbar.
Viele Grüße
Herbert
hi,
wenn ich das Programm in einem 2. Browserfenster nochmal vollkommen neu starte und dort in dem Unterprogramm mit sessionstart die Session öffne ( ?? welche wird da eigentlich geöffnet ?? ) bekomme ich Daten von der 1. Session ( die ja noch aktiv ist)
PHP versucht per default zunächst mal, die übergabe der session-id per cookie zu machen.
und wenn du einfach ein weiteres browserfenster öffnest, ist dieser cookie da ebenfalls verfügbar, wird also beim request an den server geschickt - und dieser erkennt daran beim session_start() "deine" session wieder.
works as designed.
wenn du das nicht willst, musst du wohl die übergabe der SID per cookie explizit unterbinden, und stattdessen nur auf GET setzen.
(siehe session-konfigurationsoptionen im manual.)
gruß,
wahsaga
soweit ich weiß entsteht eine neue session ja nicht aufgrund eines eigenen browser-fensters sondern einzig und allein auf die ip bezogen
deshalb könnte es sein dass immer nur eine session gleichzeitig möglich ist
ich bin mir aber wie gesagt nicht ganz sicher
lg gerhard
Moin!
soweit ich weiß entsteht eine neue session ja nicht aufgrund eines eigenen browser-fensters sondern einzig und allein auf die ip bezogen
Nein, dein Wissen ist in diesem Punkt falsch. Sessions bestehen immer Session-ID-bezogen, wird die gleiche Session-ID bei einem neuen Request übermittelt, ist es die gleiche Session.
Die Übermittlung findet vorzugsweise per Cookie statt, die Alternative "als URL-Parameter" ist leichter manipulierbar und nicht ganz so betriebssicher, wie man das evtl. gerne möchte.
Hallo Sven,
Die Übermittlung findet vorzugsweise per Cookie statt, die Alternative "als URL-Parameter" ist leichter manipulierbar und nicht ganz so betriebssicher, wie man das evtl. gerne möchte.
Bezieht sich das 'leichter' darauf, das man keinen Cookie-Editer öffnen braucht sondern nur die URL-Parameter zu ändern braucht oder gibt es da noch andere Einschränkungen ?
PS: Ich habe Dein Argument auch schon öfters gehört, kann es aber nicht so recht nachvollziehen.
Grüsse,
Daniel
echo $begrüßung;
Bezieht sich das 'leichter' darauf, das man keinen Cookie-Editer öffnen braucht sondern nur die URL-Parameter zu ändern braucht oder gibt es da noch andere Einschränkungen ?
Ja, vor allem das.
Hinzu kommt noch die Möglichkeit URL-Weitergabe per Copy'n'Paste. Den Anwender interessiert nicht dass da eine Session-ID drin steckt: "Schau mal, was für einen tollen Shop ich gefunden habe. Hier der Link..."
echo "$verabschiedung $name";
Hallo!
Ja, vor allem das.
Hinzu kommt noch die Möglichkeit URL-Weitergabe per Copy'n'Paste. Den Anwender interessiert nicht dass da eine Session-ID drin steckt: "Schau mal, was für einen tollen Shop ich gefunden habe. Hier der Link..."
Jepp, und darüber hinaus tauchen die URLs standardmäßig in diversen, fremden Logs auf (Referrer-Logs...), und sind darüber hinaus noch schlecht für Suchmaschinen. Man sollte auch dran denken, dass Session-IDs oft als "Verzeichnis" in die URL eingebunden ist...
Grüße
Andreas
Aber nun:
wenn ich das Programm in einem 2. Browserfenster nochmal vollkommen neu starte und dort in dem Unterprogramm mit sessionstart die Session öffne ( ?? welche wird da eigentlich geöffnet ?? ) bekomme ich Daten von der 1. Session ( die ja noch aktiv ist)
[...]
Wo liegt mein Denkfehler ?
Arbeite mit Provider 1und1, mysql-DB,
und verwende nur session start()
(nichts mit session-id oder get oder cookie oder so)
[...]
Also, es wird immer eine neue SessionID generiert, ausser es wurde eine Session ID übergeben:
Wenn Du im Browser Cookies deaktiviert hast und auch keine SessionID über die URL weiterreichst, kommt bei der Anfrage keine SessionID an und es wird eine neue generiert.
Ich hoffe das Hilft.
Grüsse,
Daniel S.
Hi,
Bin um jeden ( noch so kleinen ) Tip dankbar.
solange nicht alle browserfenster geschlossen werden oder ein
session_destroy durchgeführt wird ist es die gleiche session.
das mit den unterschieldichen programmen kannst du z.B. so lösen das du
vernüftige namen für die Variablen vergibst.
z.B. du hast die Programme "Hau den Lukas", "Hau den Herbert" etc. dazu
jeweils die unterprogramme wie "Männlich", "Weiblich",
"Benutzerverwaltung", etc. also könnte eine variable z.B. so aussehen:
$_SESSION['hdl']['bv']['user_id']
MfG
... erst mal vielen Dank.
das muss ich erst mal in Ruhe verdauen;
ich blicke jetzt gar nicht mehr durch.
Verstehe immer noch nicht ganz wie ich eine vollkommen neue nur für ein Projektbezogene session erstellen kann:
dass z.b. für das Programm adr.php eine session xxx besteht;
für ein Programm info.php eine session yyy besteht.
bis ich das ganze begriffen habe, werde ich wie früher die variablen mit hidden feldern übergeben.
trotzdem nochmal vielen Dank;
sollte jemand noch weitere Ideen haben bin ich dankbar
Viele Grüße
Herbert
echo $begrüßung;
Verstehe immer noch nicht ganz wie ich eine vollkommen neue nur für ein Projektbezogene session erstellen kann:
Das Setzen eines eindeutigen session_name() vor Aufruf von session_start() sollte helfen.
echo "$verabschiedung $name";
Hallo!
Verstehe immer noch nicht ganz wie ich eine vollkommen neue nur für ein Projektbezogene session erstellen kann:
dass z.b. für das Programm adr.php eine session xxx besteht;für ein Programm info.php eine session yyy besteht.
Das "Problem" sind die Cookies, oder wie die verschiedenen Browser damit umgehen. Wie schon gesagt wurde, verwendet PHP standardmäßig Cookies zur Übergabe der Session-ID, und dieser Session-Cookie existiert solange, wie die Browser-Instanz auf dem Rechner läuft. Der Session-Cookie ist eigentlich ein ganz normaler Cookie, der sich auf den einen Hostnamen bezieht, der den Cookie gesetzt hat. Gemäß HTTP-Standard schicken die Browser den Cookie nach Erhalt bei jedem Request an eine Resource (Bild, Script, Verzeichnis...) dieses Hosts zurück, sofern der Pfad im Cookie nicht eingeschränkt wurde, dazu später mehr.
Ein Firefox wird - egal wieviele Fenster offen sind, immer nur in einer Instanz ausgeführt. Das heißt jedes Fenster kennt die Cookies der anderen Fenster. Da Session-Cookies sich normalerweise auf den Hostnamen beziehen, schickt Firefox - egal welches Scripte Du unter dem Hostnamen aufrufst, immer den Session-Cookie mit - auch wenn er den aus einem anderen Fenster mit einem anderen Script hat. Für Firefox ist das nur ein Cookie der eben jedesmal mitgesendet werden muss, wenn ein Request an diesen Hostnamen rausgeht - egal aus welchem Fenster. Wenn PHP dann diesen Cookie empfängt, erkennt es die Session und startet diese erneut.
Beim IE ist das anders, der kann mehrere Instanzen parallel geöffnet haben, das heißt wenn Du ein Fenster komplett neu öffnest (also nicht aus einem anderen IE-Fenster heraus), hast Du eine neue IE-Instanz, mit eigenen (Session-)Cookies. Damit kannst Du dann auch parallel mit zwei Sessions unter einem Hostnamen arbeiten.
Du hast aber mehrere Möglichkeiten dieses Problem zu umgehen.
1. verwende unterschiedliche Hostnamen. Dann musst Du nichts verändern, denn der Browser schickt einen Cookie immer nur an den Hostnamen, der den Cookie auch gesetzt hat.
2. verwende unterschiedliche Verzeichnisse, und passe die Einstellungen mit session_set_cookie_params() an, vor allem den Cookie-Pfad (2. Parameter). Hiermit kannst Du beeinflussen, dass der Browser den Cookie immer nur an ein bestimmtes Verzeichnis schicken soll. Und wenn das eben zwei verschiedene Verzeichnisse sind, kommen sich die Sessions nicht mehr ins Gehege, auch nicht mit Firefox.
3. Schalte die Verwendung von Cookies komplett ab. Hierzu muss session.use_cookies abgeschaltet sein und session.use_trans_sid eingeschaltet sein. Verändern kannst Du diese ini-Einstellungen zur Laufzeit mit der Funktion ini_set().
bis ich das ganze begriffen habe, werde ich wie früher die variablen mit hidden feldern übergeben.
Nein, das solltest Du nicht machen: http://www.php-faq.de/q/q-sessions-zweck.html ;-)
Grüße
Andreas