Platnost autentizace na subdoménách
- Jan Tvrdík
- Nette guru | 2595
Lze nějak nastavit, aby autentizace uživatele (přes
Environment::getUser()->authenticate
) platila i na
subdoménách?
- David Grudl
- Nette Core | 8218
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
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.
- Jan Tvrdík
- Nette guru | 2595
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
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).