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 wechselt, wird er sofort "abgemeldet", bis die Subdomain entfernt wird.
Gibt es eine Möglichkeit, Sitzungen aus allen Domänen zu akzeptieren, solange es sich um * .mydomain.com handelt?
ini_set('session.cookie_domain', '.example.com')
, dannsession_start()
oderSession::start()
von github.com/delight-im/PHP-CookieAntworten:
Hier sind 4 Optionen.
Platziere dies in deiner php.ini:
session.cookie_domain = ".example.com"
Oder in Ihrem .htaccess:
Oder als erstes in Ihrem Skript:
ini_set('session.cookie_domain', '.example.com' );
Oder in Ihrer PHP-Fpm-Pool-Konfiguration für Ihre Site:
quelle
session_set_cookie_params(0, '/', 'example.com', false, false);
ini_set('session.cookie_domain', '.example.com');
kommt vorsession_start();
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.
quelle
Ändern Sie den Sitzungsnamen oben in der Kernfunktionsdatei wie
session_name('mysession');
Verwenden Sie dann den folgenden Code in die 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 Standard-Sitzungsnamen der Subdomain und entfernen Sie das Standard-Cookie in der Kernfunktionsdatei der Subdomain wie folgt:
/*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 Ihren 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 Domain und Subdomain und wiederholen Sie den Vorgang.
quelle
Ich weiß, dass dies ziemlich alt ist - aber um den Vorschlag von @ CTT weiter zu erweitern - musste ich in jedem Unterverzeichnis (das PHP-Code ausführt und die Sitzung erfordert) meiner Unterdomäne eine php.ini-Datei mit dem folgenden Text hinzufügen:
Ich hoffe, das hilft (ich habe ewig gebraucht, um das herauszufinden).
quelle
Eine andere Option, die für mich funktioniert hat, besteht darin, den Namen der Sitzung zu erzwingen:
session_name("myWebsite"); session_start();
quelle
Ja.
ini_set
funktioniert. Denken Sie jedoch daran, alle Caches und Cookies des Browsers zu zerstören, damit dies funktioniert.in deinem
xxx.example.com
undyyy.example.com
sollten deine PHP-Dateien so beginnen.ini_set('session.cookie_domain', '.example.com' ); session_start();
quelle
Ich hatte gerade dieses Problem und es stellte sich heraus, dass ich verschiedene php.ini-Dateien für zwei verschiedene Subdomains verwendete. Diese INI-Dateien haben verschiedene session.save_path- Variablen angegeben. Aus offensichtlichen Gründen muss dies für alle Subdomänen gleich sein, die Sitzungen gemeinsam nutzen müssen.
quelle
Versuche dies:
protokollierte den Benutzer. Wenn der Benutzer zu einer anderen Subdomain wechselt, wird die Sitzungs-ID in der URL wie folgt gesendet
user.mydomain.com/?id=$sessionId
$sessionId = $_GET['id']; session_start($sessionId);
Jetzt erhält der Benutzer alle Sitzungswerte und bleibt angemeldet.
quelle
Vor dem
session_start()
Gebrauchsession_set_cookie_params()
ersetzen .domain.com mit Ihrer Domain wie in diesem Beispiel:session_set_cookie_params(0, '/', '.domain.com'); session_start();
quelle
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');
Dies ist eine gute Lösung, die Sie jedoch nicht in allen Situationen verwenden können. Zum Beispiel funktioniert es nicht, wenn Sie sich nicht auf Cookies verlassen können, die keine Sitzung sind.
Dies muss tatsächlich funktionieren, wenn Sie es richtig verwenden.
ini_set('session.cookie_domain', '.example.com' );
Zum Beispiel müssen Sie es vor
session_start()
und auch in alle Dateien setzen, die aufrufensession_start()
quelle