webentwicklung-frage-antwort-db.com.de

Erlauben Sie PHP-Sitzungen, auf Subdomains übertragen zu werden

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

65
Anthony

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
80
CTT
        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.

12
sucitivel

Ä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.

5

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).

4
joeldixon66

ja. ini_set arbeitet. Denken Sie jedoch daran, alle Cache-Speicher und Cookies des Browsers zu löschen, um zu sehen, dass es funktioniert.

  1. zerstöre alle Caches und Cookies deines Browsers
  2. in Ihrem xxx.example.com und yyy.example.com sollten Ihre PHP-Dateien so starten. 

    ini_set('session.cookie_domain', '.example.com' ); session_start();
    
3
Wikum Ekanayake

Eine andere Option, die sich für mich bewährt hat, ist den Namen der Sitzung zu erzwingen 

session_name("myWebsite");
session_start(); 
3

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.

0
Mike

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.

0
abrar