Platnost autentizace na subdoménách

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jan Tvrdík
Nette guru | 2595
+
0
-

Lze nějak nastavit, aby autentizace uživatele (přes Environment::getUser()->authenticate) platila i na subdoménách?

David Grudl
Nette Core | 8218
+
0
-

Záleží na nastavení session, což se dá změnit takto:

Environment::getSession()->configure(array(
	'session.cookie_path ' => '/',    // cookie is available within the entire domain
	'session.cookie_domain' => '',    // cookie is available on all subdomains
));

ale jelikož tohle jsou výchozí hodnoty, tak by to mělo na subdoménách fungovat…

Jan Tvrdík
Nette guru | 2595
+
0
-

David Grudl napsal(a):

ale jelikož tohle jsou výchozí hodnoty, tak by to mělo na subdoménách fungovat…

To jsem si taky říkal po zběžném projetí zdrojových kódu. Bohužel to nefunguje. Každá subdoména má u mě jako by vlastní přihlašování, které jsou zcela nezávyslé. Vypadá to na problém s nastavením cookie, protože všechny moje nástroje potvrzují, že cookie je nastavena vždy jen na danou subdoménu. Zkusím se v tom ještě pohrabat a uvidím, co se dá dělat.

hrach
Člen | 1838
+
0
-

jestli se nepletu, tak pokud chci nastavovat cookie i pro subdomenu, musim uvest domain ve tvar:
.example.com

Jan Tvrdík
Nette guru | 2595
+
0
-

Po mnoha expirementech jsem našel jen jedno jediné a pěkně hnusné řešení:

Přímá editace 64. řádku Session.php na hodnotu .example.com

Jakékoliv jiné pokusy, např.

Environment::getSession()->configure(array(
     'session.cookie_domain' => '.example.com',
));

skončily neúspěchem (příčinu jsem nezkoumal, ale určitě by byla zajímavá)

Editoval Jan Tvrdík (23. 11. 2008 23:20)

David Grudl
Nette Core | 8218
+
0
-

hrach napsal(a):

jestli se nepletu, tak pokud chci nastavovat cookie i pro subdomenu, musim uvest domain ve tvar:
.example.com

Máš recht!

Jan Tvrdík napsal(a):

Jakékoliv jiné pokusy skončily neúspěchem (příčinu jsem nezkoumal, ale určitě by byla zajímavá)

Nastavení parametrů cookie musí být provedeno před tím, než je sezení otevřeno (lze zjistit přes Environment::getSession()->isStarted(). Pozdější volání nemá efekt (teď mě napadá v takovém případě vyvolat výjimku; zároveň nastavení cookies by teoreticky šlo provést i po nastartování session).

Sezení se otevírá například při přístupu ke jmennému prostoru (třeba voláním $namespace = Environment::getSession('myapp'), nebo používáním třídy User).

David Grudl
Nette Core | 8218
+
0
-

Už jsem asi odhalil problém. Uploadnul jsem opravenou verzi.

Ola
Člen | 385
+
0
-

Zdravím, přihlašování pro doménu a její subdomény mi stále nefunguje. Když kouknu do správce cookies tak je tam správně uvedená doména jako .example.com, ale jakmile přejdu na administraci stránek subdomény tak mě to odhlásí .. Neví někdo co s tím?