Session IE regenerace id – duplicitní
- Jiří Nápravník
- Člen | 710
Nesetkal se někdo s problémem sessions v IE? Podotýkám na ůvod, že jsem cache a cookies prohlížeče pročistil, většinou to problém vyřeší.
O co jde? Přijdu na web, přihlásím se, vše funguje v pořádku, pak zavřu prohlížeč, po čase jej zase otveřu jdu na přihlašovací stránku. Přihlásím se, ale ejhle, jsem hned vykonput, že nejsem přihlášen. Když sleduju network komunikaci, vidím, že se posílá dvakrát cookie s dvěma různými hodnotami. Nepomůže nic, než zase vzít smazat cookies přes prohlížeč a pak se přihlásím. Pomohlo mi až zasáhnutí do zdrojáků nette kde jsem dal na začátek regenerateId return, aby se neregenovala, což samozřejmě není nic hezkého… Jak to vyřešit. Podotýkám, že se to týká jen IE, ale bohužel většina redakce použíává právě jej…
- Pavel Macháň
- Člen | 282
Jiří Nápravník napsal(a):
Nesetkal se někdo s problémem sessions v IE? Podotýkám na ůvod, že jsem cache a cookies prohlížeče pročistil, většinou to problém vyřeší.
O co jde? Přijdu na web, přihlásím se, vše funguje v pořádku, pak zavřu prohlížeč, po čase jej zase otveřu jdu na přihlašovací stránku. Přihlásím se, ale ejhle, jsem hned vykonput, že nejsem přihlášen. Když sleduju network komunikaci, vidím, že se posílá dvakrát cookie s dvěma různými hodnotami. Nepomůže nic, než zase vzít smazat cookies přes prohlížeč a pak se přihlásím. Pomohlo mi až zasáhnutí do zdrojáků nette kde jsem dal na začátek regenerateId return, aby se neregenovala, což samozřejmě není nic hezkého… Jak to vyřešit. Podotýkám, že se to týká jen IE, ale bohužel většina redakce použíává právě jej…
Pokud jde o platnost session pro více subdomén tak jsem měl stejný problém viz https://forum.nette.org/…ro-subdomeny#… , ale nevyřešil
Editoval EIFEL (19. 4. 2014 1:04)
- Jiří Nápravník
- Člen | 710
Eifel: nn, tady neni na vice domen, je to na jednu domenu. Jedina nestandardnost je, ze mam vlastni cookie name.
Enumag mám nette 2.1.2 – poslední stable. Jak to myslíš s tou ochranou při druhém volání? Nějak jsem zmaten..
- enumag
- Člen | 2118
Hmm ona tam ta ochrana už
je ($this->regenerated
) takže nechápu jak se ti to může
regenerovat dvakrát.
EDIT: Aha, ledaže z nějakého důvodu vícekrát voláš
Session::start()
: https://api.nette.org/…ion.php.html#…
a mezi tim ještě Session::close()
nebo
Session::destroy()
.
Editoval enumag (19. 4. 2014 11:03)
- Jiří Nápravník
- Člen | 710
NN, necacrhuji nijak se session, v configu mam jenom tohle:
session:
expiration: 100 days
autoStart: TRUE
name: PHPSESSIDMM
a pak klasicky signpresenter s loginem.
Ja nevim, jestli se regerenuji dvakrat, ale proste mam najednou dve cookies s nazvem PHPSESSIDMM, ktere se posilaji a to tam vadi
- Jiří Nápravník
- Člen | 710
Tak jsem přišel konečně na problém. Nevím jeslti je to chyba v IE nebo v Nette, ale myslím si, že by bylo záhodno, kdyby tohle Nette řešilo.
Mám web na
example.com
administraci na
admin.example.com
aplikace ma automaticke startovani session, přes neon.
Jdu na example.com a tam pracuji, je tam Cookie jedna, vše v pořádku, nikde tam se session nepracuji, jen se session nastartuje diky autostartu. Globální expirace je 100 dní
Ukázka komunikace:
Směr Klíč Hodnota Platí do Doména Cesta Zabezpečené Pouze HTTP
Odesláno PHPSESSIDMM f1e5bptqu3hf9ob9ojrkorp8p3
Odesláno nette-browser 3zfwiyzwbh
Odesláno __gfp_64b Cv2GB_xL_j7e8MXHPQjpyQZQ5H86tyOHCuxOsggZA9L.E7
Odesláno bblosync 1398254290082
Odesláno ibbid BBID-01-00729683000800893
Přijato PHPSESSIDMM f1e5bptqu3hf9ob9ojrkorp8p3 Fri, 01-Aug-2014 11:58:22 GMT / Ne Ano
Přijato nette-browser 3zfwiyzwbh Konec relace / Ne Ano
jdu na admin.example.com. Tady je přihlášení takto:
$this->userService->setExpiration(3600, TRUE); – či-li po zavření
prohlížeče se smazné session.
při načtení pořád jedna Cookie PHPSESSIDMM se stejnou hodnotou.
Když se přihlásím v pořádku, vše funguje a mohu pracovat stále. Zavřu
prohlížeč, jdu na admin.example.com
Komunikace:
Směr Klíč Hodnota Platí do Doména Cesta Zabezpečené Pouze HTTP
Odesláno nette-browser bajelo21a2
Odesláno PHPSESSIDMM f1e5bptqu3hf9ob9ojrkorp8p3
Odesláno PHPSESSIDMM f1e5bptqu3hf9ob9ojrkorp8p3
Odesláno nette-browser 3zfwiyzwbh
Odesláno __gfp_64b Cv2GB_xL_j7e8MXHPQjpyQZQ5H86tyOHCuxOsggZA9L.E7
Odesláno bblosync 1398254290082
Odesláno ibbid BBID-01-00729683000800893
Přijato PHPSESSIDMM al9sp8927rhvl164a5nkj2tg52 Fri, 01-Aug-2014 12:00:47 GMT / Ne Ano
Přijato nette-browser bajelo21a2 Konec relace / Ne Ano
Přihlásím se a jsem hned vyhozen, odhlášen.
Komunikace po kliku na tlačítko, tedy při handleru obsluhujícím forumlář (tam proběhne přihlášení a redirect do zabezpečené části)
Směr Klíč Hodnota Platí do Doména Cesta Zabezpečené Pouze HTTP
Odesláno PHPSESSIDMM f1e5bptqu3hf9ob9ojrkorp8p3
Odesláno __gfp_64b Cv2GB_xL_j7e8MXHPQjpyQZQ5H86tyOHCuxOsggZA9L.E7
Odesláno ibbid BBID-01-00729683000800893
Odesláno PHPSESSIDMM qc8cbb647jeacmjesi6q2n2ti0
Odesláno nette-browser m3j9jww40a
Přijato PHPSESSIDMM c13ahleeo854n0ojmt5nrngo97 Fri, 01-Aug-2014 12:09:15 GMT / Ne Ano
Přijato nette-browser m3j9jww40a Konec relace / Ne Ano
Komunikace v zabezpečené části, kde jsem vykopnut, protože nejsem údajně přihlášen:
Směr Klíč Hodnota Platí do Doména Cesta Zabezpečené Pouze HTTP
Odesláno PHPSESSIDMM f1e5bptqu3hf9ob9ojrkorp8p3
Odesláno __gfp_64b Cv2GB_xL_j7e8MXHPQjpyQZQ5H86tyOHCuxOsggZA9L.E7
Odesláno ibbid BBID-01-00729683000800893
Odesláno PHPSESSIDMM qc8cbb647jeacmjesi6q2n2ti0
Odesláno nette-browser m3j9jww40a
Odesláno PHPSESSIDMM f1e5bptqu3hf9ob9ojrkorp8p3
Odesláno __gfp_64b Cv2GB_xL_j7e8MXHPQjpyQZQ5H86tyOHCuxOsggZA9L.E7
Odesláno ibbid BBID-01-00729683000800893
Odesláno PHPSESSIDMM qc8cbb647jeacmjesi6q2n2ti0
Odesláno nette-browser m3j9jww40a
Odesláno PHPSESSIDMM f1e5bptqu3hf9ob9ojrkorp8p3
Odesláno __gfp_64b Cv2GB_xL_j7e8MXHPQjpyQZQ5H86tyOHCuxOsggZA9L.E7
Odesláno ibbid BBID-01-00729683000800893
Odesláno PHPSESSIDMM c13ahleeo854n0ojmt5nrngo97
Odesláno nette-browser m3j9jww40a
Přijato PHPSESSIDMM lepg1smn6kbv98tnbkbrdfgtf3 Fri, 01-Aug-2014 12:09:16 GMT / Ne Ano
Přijato nette-browser m3j9jww40a Konec relace / Ne Ano
a nejde se proste prihlasit vubec, porad se opakuje stejný scenář, přihlášení a následný redirect zpet na přihlášení, protože nejsem přihlášen.
Je případně nějaký workaround, jak to vyřešit, aniž bych zakazoval regenerateId?
- Jiří Nápravník
- Člen | 710
To asi nebude to same. Ja se prihlasim prvne v pohode, pak to nejde, viz ta komunikace.
Napada me, nemuze to byt tim, ze u tech cookies neni nastavena domena? Treab v chrome apod. mam cookie domenu tech session admin.example.com, prip. example.com. V IE je to pole (aspon podle debugbaru) prazdne.
Kdyz koukám tak v msdn.com píšou tohle (viz níže), nemůže to býte ten problém, že pak v podsatě, kdyžý nezadává Nette u sessiony cookie_domain, tak je pak vidět na admin.example.com i ta z example.com a dělá to pak bordel?
Q3: If I don’t specify a DOMAIN attribute when a cookie, IE sends it to all nested subdomains anyway?
A: Yes, a cookie set on example.com will be sent to sub2.sub1.example.com.
Internet Explorer differs from other browsers in this regard. Here’s a test case.
- Jiří Nápravník
- Člen | 710
Tak to vypada, ze problem je orpavdu v tom, ze prazdne cookie_domain bere IE nějak nestandardně, když jsem do extension dal:
public function beforeCompile()
{
parent::beforeCompile();
$session = $this->getContainerBuilder()->getDefinition('session');
$session->addSetup('setCookieParameters', ['/', $_SERVER['SERVER_NAME']]);
}
což v podstatě jen nastaví cookie_domain pro tu konkretni domenu. A je po problemu, nebo aspon se to tak tváří:-)
Je to na bug report? Mělo by to Nette řešit?
EDIT: tak pry klientovi to stejne nejde, i kdyz promazne vsechny cache:/
Editoval Jiří Nápravník (24. 4. 2014 2:17)