PHP-Sitzungen über Subdomains hinweg

Lesezeit: 5 Minuten

PHP Sitzungen uber Subdomains hinweg
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.

  • 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

1646898248 542 PHP Sitzungen uber Subdomains hinweg
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.

  • Ich bestätige, es löst das Problem. Ich habe es satt, dort meine Antwort zu bekommen: stackoverflow.com/questions/4948340/…. Aber ich habe es hier gefunden.

    – Römisch

    10. Februar 2011 um 17:04 Uhr

  • Funktioniert perfekt! Suche schon ewig danach. Es war der $some_name = session_name("some_name"); das hat es getan. Danke und Upvote.

    – Bausatz

    17. März 2011 um 12:19 Uhr

  • Hinzufügen session_name("domain"); war für mich auch die fehlende Zutat. Die Dokumentation auf php.net bezüglich dieser Sitzungseinstellungen fehlt. Es gibt Community-Beiträge auf php.net, die darauf hinweisen, dass session.name definiert werden muss, bevor Änderungen an session_set_cookie_params() angewendet werden können.

    – David Caroll

    3. Juli 2011 um 7:28 Uhr

  • ja. Bestätigt. schön, da drehte man sich ewig im kreis 😉

    – Daithí

    15. Januar 2012 um 20:46 Uhr

  • HINWEIS … musste meinen Browser schließen und neu starten, damit er auf dem Lebensserver funktioniert. Lassen Sie welche weg ini_set("session.cookie_domain", ".domain.com"); Dies führte dazu, dass bei jeder Aktualisierung eine neue Sitzungs-ID erstellt wurde.

    – Daithí

    15. Januar 2012 um 21:30 Uhr

1646898249 768 PHP Sitzungen uber Subdomains hinweg
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

1646898250 727 PHP Sitzungen uber Subdomains hinweg
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.

  • Welche Browser werden nicht unterstützt?

    – Gawpertron

    16. Februar 2011 um 19:09 Uhr

  • welche Browserunterstützung hat das hier zu bieten? Dies ist eine serverseitige Aktion.

    – Kuf

    20. Oktober 2014 um 17:45 Uhr

PHP Sitzungen uber Subdomains hinweg
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)

1646898251 465 PHP Sitzungen uber Subdomains hinweg
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

PHP Sitzungen uber Subdomains hinweg
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.

1646898252 55 PHP Sitzungen uber Subdomains hinweg
Taube

Benutze das, es funktioniert:

ini_set('session.cookie_domain', 
    substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));

  • das sieht so aus, als würde es das Cookie für die tld setzen … oder übersehe ich etwas?

    – chacham15

    20. Januar 2015 um 23:58 Uhr

986920cookie-checkPHP-Sitzungen über Subdomains hinweg

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy