$_SESSION zwischen verschiedenen Domains nutzen
peter
- php
-1 snafu-2 Rouven2 Sven Rautenberg0 Tom0 Tom0 Sven Rautenberg
Hi zusammen,
ich hab mel ne Frage zu PHP-Session. Ist es möglich die Session zwischen verschiedenen URLS/servern zu nutzen? Hierzu zei Möglichkeiten:
Option 1:
Server www.domain.de & www2.domain.de
Skript auf Server www.domain.de initiiert Session. Benutzer wird nach redirect auf www2.domain.de weitergeleitet. Ist die PHP-Session mit allen Parameter darin nun auf www2.domain.de verfügbar?
Option 2:
Server www.domain.de & www.NEUEdomain.de
Skript auf Server www.domain.de initiiert Session. Benutzer wird nach redirect auf www.NEUEdomain.de weitergeleitet. Ist die PHP-Session mit allen Parameter darin nun auf www.NEUEdomain.de verfügbar?
Bitte kurz um Antwort. Ich habe leider nicht die möglichkeit das zu Testen.
Gruß und Danke
Peter
Hi zusammen,
ich hab mel ne Frage zu PHP-Session. Ist es möglich die Session zwischen verschiedenen URLS/servern zu nutzen? Hierzu zei Möglichkeiten:
Option 1:
Server www.domain.de & www2.domain.de
Skript auf Server www.domain.de initiiert Session. Benutzer wird nach redirect auf www2.domain.de weitergeleitet. Ist die PHP-Session mit allen Parameter darin nun auf www2.domain.de verfügbar?Option 2:
Server www.domain.de & www.NEUEdomain.de
Skript auf Server www.domain.de initiiert Session. Benutzer wird nach redirect auf www.NEUEdomain.de weitergeleitet. Ist die PHP-Session mit allen Parameter darin nun auf www.NEUEdomain.de verfügbar?Bitte kurz um Antwort. Ich habe leider nicht die möglichkeit das zu Testen.
Gruß und Danke
Peter
sessions gehen meines wissens nach nur auf einer (sub)domain.
du könntest jedoch den wert der session-variablen in einem cookie speichern und die gültigkeit für deine hauptdomain setzen.
danach erzeugst du eine neue session bei der anderen subdomain (www.domain.xx zu www2.domain.xx wäre also möglich, mit cookies).
wirklich domainübergreifend geht nicht (www.domain1.xx zu www.domain2.xx geht nicht).
ich bin mir zu 99.9% sicher, dass ich richtig liege aber man kann sich ja mal irren :)
Hi,
Option 1:
Sollte sie im Normalfall sein, da der Server der Selbe ist und der Browser damit seine Cookies etc. ausliefert. Hierdurch sollte der Server eigentlich in der Lage sein den Nutzer zu identifizieren und die Session fortzuführen.
Option 2:
Nein, funktioniert nicht. Die Server verwalten ihre eigenen Sessions und tauschen diese nicht untereinander aus.
MfG
Rouven
hi,
erst mal danke an alle die genatwortet haben.
Option 1:
Sollte sie im Normalfall sein, da der Server der Selbe ist und der Browser damit seine Cookies etc. ausliefert. Hierdurch sollte der Server eigentlich in der Lage sein den Nutzer zu identifizieren und die Session fortzuführen.
wie verhält es sich wenn die server unterschiedliche ip-adressen (also verschiedene hardware im genauen) haben. ist das dann immer noch möglich?
Hello,
wie verhält es sich wenn die server unterschiedliche ip-adressen haben?
Die sind irrelevant, wenn die Session über Domain-Namen aufgebut wurde. Dann wird sie auch über Domain-Namen geführt und diese werden zeitnah aufgelöst. Das gilt natürlich nicht, wenn man die Session über IP-Adressen aufgebaut hat.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hi Rouven,
Option 1:
Sollte sie im Normalfall sein, da der Server der Selbe ist und der Browser damit seine Cookies etc. ausliefert. Hierdurch sollte der Server eigentlich in der Lage sein den Nutzer zu identifizieren und die Session fortzuführen.
Wer sagt das alle Subdomains einer Domain sowie die Domain selber auf einem Server liegen? Das beste Beispiel ist SELFHTML - die ganzen Subdomains sind auf drei Server verteilt, weil einer die ganze Last nicht packen würde. Aber auch ich lagere des öfteren Subdomains auf andere Server (mit erweiterten technischen Möglichkeiten) aus.
Option 2:
Nein, funktioniert nicht. Die Server verwalten ihre eigenen Sessions und tauschen diese nicht untereinander aus.
Wer sagt, dass nicht gerade diese beiden verschiedenen Domains auf einem Server liegen? Wie Sven auch schon erklärt hat müssen die PHP-Session-Dateien für beide Domains zur Verfügung stehen - beide "Projekte" (also Domains) müssen auf die gleichen Dateien Zugriff haben, eine Sache die normale logischerweise aus Sicherheitsgründen von der Serverkonfiguration her nicht erlaubt ist. Normalerweise will man ja gerade nicht, dass andere Leute auf demselben Server Zugriff auf die "eigenen" Dateien haben.
Was Sven zu den Session-Cookies gesagt hat ist natürlich richtig, aber nicht zwingend notwendig, da man die Session-ID ja auch manuell an alle Links zur zweiten Domain dranhängen kann (mit session_id() und nicht mit der Konstanten SID, da letztere leer ist, wenn die Session-ID in einem Cookie gesetzt wurde).
Hat man allerdings keinen direkten Zugriff und auch keine Einflussmöglichkeit auf die Serverkonfiguration, so wird man selbst dann, wenn beide Domains auf demselben Server liegen in der Regel scheitern. Eine andere Möglichkeite selbiges Ziel zu erreichen wäre einen eigenen Session-Mechanismus zu schreiben - das ist nicht so schwer wie es sich anhört, man könnte z.B. einfach die wichtigen Daten in einer MySQL-DB (wahlweise auch anderes DBMS) speichern. In der Regel ist es leichter von zwei Stellen auf eine MySQL-Datenbank zuzugreifen, als den Server so zu konfigurieren, dass zwei "Projekte" auf dieselben Session-Dateien Zugriff erhalten.
MfG, Dennis.
Moin!
Was Sven zu den Session-Cookies gesagt hat ist natürlich richtig, aber nicht zwingend notwendig, da man die Session-ID ja auch manuell an alle Links zur zweiten Domain dranhängen kann (mit session_id() und nicht mit der Konstanten SID, da letztere leer ist, wenn die Session-ID in einem Cookie gesetzt wurde).
Genau an diesem Punkt fällt mir ein Punkt ein, der das bisherige Szenario zum Scheitern bringen könnte: Server 1 kann einen anderen session_name() festgelegt haben, als Server 2. Dieser Name ist normalerweise nicht konkret von Belang, Unterschiede würden aber verhindern, dass das auf die gesamte Subdomain erweiterte Cookie auf dem jeweils anderen Server wirksam würde, weil PHP dort nach einem anderen Wertepaar sucht.
Und auch der sonst praktizierte Ansatz, einfach session_name() und session_id() des lokalen PHP in einen generierten Link zu integrieren, schlägt fehl, weil das lokale PHP ja keine Information über den tatsächlichen session_name() des externen PHP hat. Man müßte diese Information also im lokalen PHP als String konfigurieren und sicherstellen, dass sich diese Einstellung nur synchron verändert.
- Sven Rautenberg
echo $begrüßung;
Genau an diesem Punkt fällt mir ein Punkt ein, der das bisherige Szenario zum Scheitern bringen könnte: Server 1 kann einen anderen session_name() festgelegt haben, als Server 2. Dieser Name ist normalerweise nicht konkret von Belang, Unterschiede würden aber verhindern, dass das auf die gesamte Subdomain erweiterte Cookie auf dem jeweils anderen Server wirksam würde, weil PHP dort nach einem anderen Wertepaar sucht.
Ich befürchte, dass ich hier deine Bedenken nicht richtig verstehe. session.name ist "PHP_INI_ALL-Changable" und auch session_name() ist nicht nur zum Auslesen geeignet.
Und auch der sonst praktizierte Ansatz, einfach session_name() und session_id() des lokalen PHP in einen generierten Link zu integrieren, schlägt fehl, weil das lokale PHP ja keine Information über den tatsächlichen session_name() des externen PHP hat. Man müßte diese Information also im lokalen PHP als String konfigurieren und sicherstellen, dass sich diese Einstellung nur synchron verändert.
Es sollte kein Problem sein, wenn man sich innerhalb seiner Anwendungen auf einen Namen festlegt.
echo "$verabschiedung $name";
Moin!
Es sollte kein Problem sein, wenn man sich innerhalb seiner Anwendungen auf einen Namen festlegt.
Das muß man dann aber in allen Skripten explizit tun, und darf sich eben nicht auf den Defaultwert verlassen.
- Sven Rautenberg
Hi Sven,
Das muß man dann aber in allen Skripten explizit tun, und darf sich eben nicht auf den Defaultwert verlassen.
Korrekt - aber verlässt man sich nicht grundsätzlich nicht auf Default-Werte?!?
MfG, Dennis.
Moin!
Das muß man dann aber in allen Skripten explizit tun, und darf sich eben nicht auf den Defaultwert verlassen.
Korrekt - aber verlässt man sich nicht grundsätzlich nicht auf Default-Werte?!?
Wozu gibt es die dann?
Sie passend und identisch zu verändern ist ja in Ordnung. Nur: Muß man eben auch dran denken. Deshalb mein Einwand bzw. Hinweis.
- Sven Rautenberg
Moin!
Option 1:
Server www.domain.de & www2.domain.de
Skript auf Server www.domain.de initiiert Session. Benutzer wird nach redirect auf www2.domain.de weitergeleitet. Ist die PHP-Session mit allen Parameter darin nun auf www2.domain.de verfügbar?
Nicht standardmäßig.
Erstens mußt du das Session-Cookie manuell setzen und so konfigurieren, dass es nicht nur für die genaue Domain "www.example.org" paßt, sondern für alle Subdomains ".example.org".
Zweitens mußt du natürlich den Zugriff auf die Session-Daten so gestalten, dass beide beteiligte PHPs auf die gleiche Datenbasis zugreifen. Das geht, nachdem Schritt 1 ausgeführt wurde, nur dann standardmäßig, wenn der gleiche Server benutzt wird. Sind mehrere Server im Spiel, mußt du manuell dafür sorgen, dass PHP auf beiden Servern auf die gleiche Datenbasis zugreifen kann, beispielsweise durch Speichern der Sessiondaten in einer Datenbank, auf die beide Server zugreifen können.
Option 2:
Server www.domain.de & www.NEUEdomain.de
Skript auf Server www.domain.de initiiert Session. Benutzer wird nach redirect auf www.NEUEdomain.de weitergeleitet. Ist die PHP-Session mit allen Parameter darin nun auf www.NEUEdomain.de verfügbar?
Die Session-ID kann nicht per Cookie übertragen werden, sondern muß in der URL übergeben werden. Alle anderen Ausführungen hinsichtlich des Zugriffs auf die Session-Daten seitens PHP gelten, wie bei Option 1.
Alternativ kann man Option 1 natürlich auch so behandeln, wie Option 2.
- Sven Rautenberg
Hello,
was soll der Blödinn. Meine Postings verschwinden dauernd! *umpf*
Man kann auch das relaevante Dateisystem des einen Servers in das des anderen moeunten. Auf jedem läuft ein Webserver, der die entsprechende Domain in das vermeintlich gemeinsame Verzeichnis abbildet (es sind mehrere...)
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hello,
Man kann auch das relaevante Dateisystem des einen Servers in das des anderen moeunten. Auf jedem läuft ein Webserver, der die entsprechende Domain in das vermeintlich gemeinsame Verzeichnis abbildet (es sind mehrere...)
Da fehlt noch was...
Die Session-ID muss man dann aber (einmalig) mittels Trans_SID weiterreichen, da sie vom Browser per Cookie nur für die Domain mitgeliefert wird, für die sie am Client eingetragen wurde.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Moin!
was soll der Blödinn. Meine Postings verschwinden dauernd! *umpf*
Es wurde nichts gelöscht - du landest höchstwahrscheinlich in der "Meckerschleife" des Forums, weil du (genau wie ich in diesem Thread) genügend "Spampunkte" sammelst. Und wenn man das übersieht, und das Fenster vorschnell schließt, ist eben nichts gepostet.
Man kann auch das relaevante Dateisystem des einen Servers in das des anderen moeunten. Auf jedem läuft ein Webserver, der die entsprechende Domain in das vermeintlich gemeinsame Verzeichnis abbildet (es sind mehrere...)
Ich habe gerüchteweise gehört, dass NFS sich für den gemeinsamen parallelen Zugriff auf Dateien nicht so hundertprozentig eignen soll (in READMEs gewisser Programme wird jedenfalls diffus abgeraten, NFS benutzen zu wollen). SMB würde ich den Job auch nicht wirklich zutrauen (ist außerdem von der Performance noch schlechter). Und alles, was man klassischerweise als Dateitransferprotokoll kennt (FTP, HTTP, RSYNC, WebDAV,...) ist auch nicht wirklich toll geeignet, möchte ich meinen, weil es am Locking mangelt (wobei WebDAV sich deswegen vermutlich doch ganz toll eignet würde - aber einen WebDAV-Teil im Apache einzurichten, damit dieser Apache dann seinem eigenen PHP und dem des zweiten Servers als Datenlager für die Session-Daten dient - das klingt extrem nach "von hinten durch die Brust ins Auge" - abgesehen davon: Kann man WebDAV schon mounten? Und was macht der Windows-Nutzer? ;) ).
Als kritisch würde ich jedenfalls den möglicherweise parallelen Dateizugriff ansehen. Und der ist beim Netzzugriff auf das Dateisystem nicht unbedingt gewährleistet. Insbesondere Fehlerszenarien sollten bedacht werden. Gegebenenfalls wären alternative Lösungsansätze für serverübergreifendes Sessionhandling anzuraten.
- Sven Rautenberg