Ich verwende PHP-Sitzungen (keine Cookies außer Cookies für Sitzungs-IDs) für alle Benutzerdaten. Wenn ein Benutzer zu seinem Profil user.mydomain.com geht, wird er sofort "abgemeldet", bis die Subdomain entfernt wird.
Gibt es eine Möglichkeit, Sitzungen von allen Domänen zu akzeptieren, solange es * .mydomain.com ist
Hier sind 4 Optionen.
Platziere dies in deiner php.ini:
session.cookie_domain = ".example.com"
Oder in Ihrem. Zugang:
php_value session.cookie_domain .example.com
Oder als erstes in Ihrem Skript:
ini_set('session.cookie_domain', '.example.com' );
Oder in Ihrer php-fpm-Poolkonfiguration für Ihre Site:
php_value[session.cookie_domain] = .example.com
if(isset($_COOKIE['session_id']))
session_id($_COOKIE['session_id']);
Zend_Session::start(); //or session_start();
if(!isset($_COOKIE['session_id']))
setcookie('session_id', session_id(), 0, '/', '.yourdomain.com');
sicherheit sei verdammt, wenn Sie mit unvollständigen oder schlechten Antworten genauso frustriert sind wie ich, ist dies Ihr Retter. Es funktioniert einfach.
Ändern Sie den Sitzungsnamen oben in der Kernfunktionsdateilike
session_name('mysession');
verwenden Sie dann den folgenden Code in der PHP-Seite
session_set_cookie_params(0,"/",".example.com",FALSE,FALSE);
setcookie(session_name(), session_id(),0,"/","example.com");
session_start();
Ändern Sie schließlich den Standardsitzungsnamen der Unterdomäne und entfernen Sie das Standardcookie in der Kernfunktionsdatei der Unterdomäne.
/*default session name*/
session_name("mysession");
/*remove the PHPSESSID and default session name from subdomain's cookie*/
setcookie( "mysession", "",1,"/" );
setcookie( "PHPSESSID", "",1,"/" );
wenn Sie den Cookie-Namen weiterhin als PHPSESSID verwenden, entfernen Sie einfach alle Funktionen mit
"mysession" string like session_name('mysession'), setcookie( "mysession", "",1,"/" );
Überprüfen Sie dann die vorhandenen Cookies Ihres Browsers, entfernen Sie einfach alle Cookies der Domäne und der Subdomain und wiederholen Sie den Vorgang.
Ich weiß, dass dies ziemlich alt ist - aber um den Vorschlag von @ CTT weiter auszubauen, musste ich in jedes Unterverzeichnis (das PHP-Code ausführt und die Sitzung benötigt) eine php.ini-Datei mit folgendem Text hinzufügen:
suhosin.session.cryptdocroot=Off
suhosin.cookie.cryptdocroot=Off
Ich hoffe, das hilft mir (ich habe lange gebraucht, um das herauszufinden).
ja. ini_set
arbeitet. Denken Sie jedoch daran, alle Cache-Speicher und Cookies des Browsers zu löschen, um zu sehen, dass es funktioniert.
in Ihrem xxx.example.com
und yyy.example.com
sollten Ihre PHP-Dateien so starten.
ini_set('session.cookie_domain', '.example.com' ); session_start();
Eine andere Option, die sich für mich bewährt hat, ist den Namen der Sitzung zu erzwingen
session_name("myWebsite");
session_start();
Ich hatte gerade dieses Problem und es stellte sich heraus, dass ich unterschiedliche php.ini-Dateien für zwei verschiedene Subdomains verwendete. Diese Ini-Dateien haben unterschiedliche session.save_path variables angegeben. Aus naheliegenden Gründen muss dies für alle Subdomains, die Sitzungen gemeinsam nutzen müssen, gleich sein.
Versuche dies:
session_start();
$sessionId = session_id();
hat den Benutzer angemeldet. Wenn der Benutzer zu einer anderen Unterdomäne wechselt, sendet die Sitzungs-ID in der URL wie folgt: user.mydomain.com/?id=$sessionId
$sessionId = $_GET['id'];
session_start($sessionId);
Nun erhält der Benutzer alle Sitzungswerte und bleibt angemeldet.