Ich versuche Folgendes einzurichten:
auth.example.com
sub1.example.com
sub2.example.com
Wenn der Benutzer sub1.example.com
oder besucht sub2.example.com
und nicht angemeldet ist, wird er zu weitergeleitet auth.example.com
und kann sich anmelden.
sub1.example.com
und sub2.example.com
sind zwei separate Anwendungen, verwenden jedoch dieselben Anmeldeinformationen.
Ich habe versucht, Folgendes in meiner php.ini einzustellen:
session.cookie_domain = ".example.com"
Es scheint jedoch nicht, dass die Informationen von einer Domäne an die andere weitergegeben werden.
[Bearbeiten]
Ich habe folgendes versucht:
sub1.example.com/test.php
session_set_cookie_params(0, '/', '.example.com');
session_start();
print session_id() . "<br>";
$_SESSION['Regsitered'] = 1;
echo '<a href="http://auth.example.com/test.php">Change Sites</a>'
auth.example.com/test.php
session_set_cookie_params(0, '/', '.example.com');
session_start();
print session_id() . "<br>";
$_SESSION['Checked'] = 1;
print_r($_SESSION);
Die Sitzungs-IDs sind genau gleich, aber wenn ich die $_SESSION
Variable ausgeben möchte, werden nicht beide Schlüssel angezeigt, nur der Schlüssel, den ich unter jeder Domäne festgelegt habe.
php
authentication
session
cross-domain
Drachenmantel
quelle
quelle
Antworten:
Ich weiß nicht, ob das Problem noch besteht, aber ich bin auf dasselbe Problem gestoßen und habe es gelöst, indem ich vor dem Aufruf einen Sitzungsnamen festgelegt habe
session_set_cookie_params()
:Ich habe nichts an meinem geändert,
php.ini
aber jetzt funktioniert alles gut.quelle
$some_name = session_name("some_name");
, was es getan hat. Vielen Dank und positive Bewertung.session_name("domain");
war auch für mich die fehlende Zutat. Die Dokumentation auf php.net zu diesen Sitzungseinstellungen fehlt. Es gibt Community-Beiträge auf php.net, die angeben, dass session.name definiert werden muss, bevor Änderungen an session_set_cookie_params () angewendet werden können.ini_set("session.cookie_domain", ".domain.com");
Gründe aus, die dazu geführt haben, dass bei jeder Aktualisierung eine neue Sitzungs-ID erstellt wurde.Eine Sache, die auf mysteriöse Weise verhindern kann, dass Sitzungsdaten in einer Subdomain gelesen werden, obwohl Cookies korrekt eingestellt sind,
.example.com
ist der PHP-Suhosin-Patch. Sie können alles gemäß den Beispielen in der Frage richtig konfigurieren lassen, und es kann einfach nicht funktionieren.Schalten Sie die folgenden Suhosin-Sitzungseinstellungen aus und Sie sind wieder im Geschäft:
quelle
Versuchen Sie es mit:
Anstatt:
Beachten Sie den fehlenden Zeitraum zu Beginn.
Seien Sie jedoch vorsichtig, da dies nicht von allen Browsern unterstützt wird.
quelle
Hatte genau dieses Problem - ich wollte, dass auf x.example.local erstellte Sitzungswerte auf example.local verfügbar sind und umgekehrt.
Alle Lösungen, die ich gefunden habe, sollen die Sitzungsdomäne mithilfe
php_value session.cookie_domain .example.local
von .htaccess (oder über php.ini oder über ini_set) ändern.Der Haken war, dass ich das
session.cookie_domain
für alle Subdomains (bisher ok), aber auch für die Hauptdomain eingestellt habe. Das Festlegen dersession.cookie_domain
auf der Hauptdomäne ist anscheinend ein Nein-Nein.Grundsätzlich hat es bei mir so funktioniert:
session.cookie_domain
Stellen Sie die für ALLE SUBDOMAINS ein.Oh ja, bitte stellen Sie sicher, dass die Domain eine TLD hat (in meinem Fall .local). Das HTTP-Protokoll erlaubt nicht, dass Cookies / Sitzungen in einer Domain ohne .tld gespeichert werden (dh localhost funktioniert nicht, stuff.localhost jedoch).
BEARBEITEN : Stellen Sie außerdem sicher, dass Sie Ihre Browser-Cookies immer löschen, während Sie Sitzungen über Subdomänen hinweg testen / debuggen. Wenn Sie dies nicht tun, sendet Ihr Browser immer das alte Sitzungscookie, für das wahrscheinlich noch nicht die richtige cookie_domain festgelegt ist. Der Server wird die alte Sitzung wiederbeleben und daher erhalten Sie falsch negative Ergebnisse. (In vielen Posts wird erwähnt, dass session_name ('stuff') für genau den gleichen Effekt verwendet wird.)
quelle
Ich habe es so gelöst
Weil ich an localhost gearbeitet habe
funktionierte nicht , es sieht .localhost als oberste Ebene anstelle von .com / .local / ... (ich vermute)
quelle
Ich habe bestätigt. Joreons Antwort ist richtig. Ich kann keinen Kommentar abgeben, da mein Ruf nicht ausreicht. Deshalb poste ich meinen Kommentar hier.
Definieren Sie die Konstante in einer Konfigurationsdatei. Wenn Sie es ändern möchten, müssen Sie nicht ganze Dateien ändern.
Der Sitzungsname darf nicht nur aus Ziffern bestehen, es muss mindestens ein Buchstabe vorhanden sein. Andernfalls wird jedes Mal eine neue Sitzungs-ID generiert.
Verwenden Sie den folgenden Code, um die Sitzung zu starten
Ich benutze diese Funktion:
quelle
Verwenden Sie es für jede Domain / Subdomain:
Pfad für die
session.save_path
für Ihren Fall unterschiedlich sein , aber es sollte das sein gleiche auf jeder Domain / Subdomain. Dies ist standardmäßig nicht immer der Fall.quelle
Verwenden Sie dies, es funktioniert:
quelle
Kombinierte Verwendung von Cookie-Sitzungen für Subdomänen und Stammdomänen
Ressource: http://php.net//manual/tr/function.session-set-cookie-params.php
Ich habe Werke getestet
- Codes
quelle
Ich habe die Idee, dass Sie nicht so etwas wie OpenID wollen, wie Joel vorschlägt, sondern dass Sie über mehrere Domänen hinweg Zugriff auf die Sitzungsdaten haben möchten.
Die einzige Möglichkeit, die ich mir als Lösung für dieses Problem vorstellen kann, besteht darin, die Sitzungsdaten in einer Datenbank zu speichern und aus dieser Datenbank zu ziehen.
quelle
Ich hatte ein ähnliches Problem, aber diese Lösung war gut für mich, vielleicht wird sie in Zukunft anderen helfen
bearbeite die php.ini
Die Magie ist hier
https://www.sitepoint.com/community/t/sessions-across-subdomains-domain-com-phpsessid-changes/3013/19
quelle
Ich kann nicht für andere Versionen von PHP sprechen, aber in 5.6.6 hat das einfache Festlegen des
session.cookie_domain
Werts in derphp.ini
Datei dazu beigetragen, dass alle meine Subdomains auf iPage denselben Satz von Sitzungsvariablen gemeinsam nutzen konnten.Entfernen Sie zum Testen alle vorhandenen Cookies, die sich auf Ihre Domain beziehen, aus Ihrem Browser.
Oh, ich weiß nicht, ob es einen Unterschied macht, aber ich verwende auch den automatischen Sitzungsstart.
quelle
Versuchen Sie einfach, den folgenden Code direkt über der
session_start()
Methode zu verwendenquelle
Ich habe alle Antworten oben gelesen. Ich denke, meine Antwort ist hilfreich für Leute, die dies googeln:
Stellen Sie sicher, dass die Browser Sitzungscookies an Server (von Domänen und Subdomänen) zurücksenden, und legen Sie die Sitzungscookie-Domäne als fest
.example.com
.Stellen Sie sicher, dass PHP das richtige "Ziel" findet, um die Sitzungsvariable wiederherzustellen:
session_save_path
alle für alle gleich sind (ich habe getestet).session_set_save_handler
dazu.quelle
Ich weiß, dass dies alt ist, aber dies funktioniert gut für mich mit mehreren Domains und Subdomains auf derselben Box.
?>
quelle
Verwenden :
quelle
Eine schnelle und schmutzige Lösung besteht darin, dies für Ihre Weiterleitung zu verwenden:
Dadurch wird
?PHPSESSID=etnm7kbuf5lg0r6tv7je6ehtn4
der URL etwas hinzugefügt , das PHP die Sitzungs-ID mitteilt, die es verwenden soll.quelle