
Drachenmannpanzer
Ich versuche folgendes einzurichten:
auth.example.com
sub1.example.com
sub2.example.com
Wenn der Benutzer besucht sub1.example.com
oder sub2.example.com
und sie nicht eingeloggt sind, werden sie umgeleitet zu 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, in meiner php.ini Folgendes einzustellen:
session.cookie_domain = ".example.com"
aber es scheint nicht, die Informationen von einer Domäne zur anderen weiterzugeben.
[Edit]
Folgendes habe ich versucht:
sub1.example.com/test.php
session_set_cookie_params(0, "https://stackoverflow.com/", '.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, "https://stackoverflow.com/", '.example.com');
session_start();
print session_id() . "<br>";
$_SESSION['Checked'] = 1;
print_r($_SESSION);
Die Sitzungs-IDs sind genau die gleichen, aber wenn ich die entleere $_SESSION
Variable zeigt es nicht beide Schlüssel, sondern nur den Schlüssel, den ich unter jeder Domäne festgelegt habe.

jeroen
Ich weiß nicht, ob das Problem immer noch besteht, aber ich bin gerade auf dasselbe Problem gestoßen und habe es gelöst, indem ich vor dem Anruf einen Sitzungsnamen festgelegt habe session_set_cookie_params()
:
$some_name = session_name("some_name");
session_set_cookie_params(0, "https://stackoverflow.com/", '.example.com');
session_start();
Ich habe nichts an meiner verändert php.ini
aber jetzt funktioniert alles einwandfrei.

zogm
Eine Sache, die auf mysteriöse Weise verhindern kann, dass Sitzungsdaten auf einer Subdomain gelesen werden, obwohl Cookies korrekt gesetzt sind .example.com
ist der PHP-Suhosin-Patch. Sie können alles richtig konfiguriert haben, wie in den Beispielen in der Frage, und es kann einfach nicht funktionieren.
Deaktivieren Sie die folgenden Suhosin-Sitzungseinstellungen und Sie sind wieder im Geschäft:
suhosin.session.cryptua = Off
suhosin.session.cryptdocroot = Off

Georg Claghorn
Versuchen Sie es mit:
session.cookie_domain = "example.com"
Anstatt:
session.cookie_domain = ".example.com"
Beachten Sie den fehlenden Punkt am Anfang.
Seien Sie jedoch vorsichtig, da dies nicht von allen Browsern unterstützt wird.

xtds
Ich habe es so gelöst
ini_set('session.cookie_domain', '.testdomain.example');
session_start();
Weil ich an localhost gearbeitet habe
ini_set('session.cookie_domain', '.localhost');
funktionierte nichtes sieht .localhost als oberste Ebene anstelle von .com/.local/… (vermute ich)

Terry Lin
Ich habe bestätigt. joreonDie Antwort von ist richtig. Ich kann nicht kommentieren, weil mein Ruf nicht ausreicht, also 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.
define('ROOT_DOMAIN', 'mysite.example');
define('PHP_SESSION_NAME', 'MYSITE');
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 verwenden
session_name(PHP_SESSION_NAME);
session_set_cookie_params(0, "https://stackoverflow.com/", '.' . ROOT_DOMAIN);
session_start();
Ich verwende diese Funktion:
function load_session() {
if (session_status() == PHP_SESSION_NONE) {
session_name(PHP_SESSION_NAME);
session_set_cookie_params(0, "https://stackoverflow.com/", '.' . ROOT_DOMAIN);
session_start();
} elseif (session_name() != PHP_SESSION_NAME) {
session_destroy();
session_name(PHP_SESSION_NAME);
session_set_cookie_params(0, "https://stackoverflow.com/", '.' . ROOT_DOMAIN);
session_start();
}
}
load_session(); // put it in anywhere you want to use session

sag es niemandem1
Verwenden Sie es auf jeder Domain/Subdomain:
session_name('name');
ini_set('session.cookie_domain', '.example.com');
ini_set('session.save_path', '/var/lib/php/session');
session_start();
Pfad für session.save_path
kann für deinen Fall anders sein, aber es sollte das sein gleich auf jeder Domain/Subdomain. Es ist nicht immer standardmäßig wahr.

Taube
Benutze das, es funktioniert:
ini_set('session.cookie_domain',
substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
9869200cookie-checkPHP-Sitzungen über Subdomains hinwegyes
Sie müssen es auch in Ihrem Code aktivieren, siehe http://us2.php.net/manual/en/function.session-set-cookie-params.php
– Rückstand
30. Juni 2009 um 15:18 Uhr
Ich habe fast das gleiche Setup (ich habe die Session-Cookie-Domain mit einem Aufruf von “session_set_cookie_params” festgelegt) und es funktioniert gut.
– Milen A. Radev
30. Juni 2009 um 15:25 Uhr
Hier ist eine nette Funktion, die funktioniert stackoverflow.com/questions/2835486/…
– Boksiora
14. Juli 2013 um 9:25 Uhr