IE8, ajax a session

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
zaxeeq
Člen | 17
+
0
-

Zdravím,

hrál jsem si dneska trošku víc s ajaxem a narazil jsem na zajímavý problém. Ve firefoxu ajaxování fungovalo OK, v IE8 se vždy zneplatnila session. Zkoumáním hlaviček a třídy Session jsem našel problém – při „normálním“ requestu šla hlavička Accept-Language: cs-CZ, při ajaxovém Accept-Language: cs. Což narazilo v metodě generateVerificationKey, která i z této hlavičky generuje kontrolní klíč. Stačilo napsat potomka Session s přepsáním metody generateVerificationKey s vynecháním Accept-Language hlavičky a jeho podstrčení pomocí config.ini a vše zase jede jak má (taky by to šlo úplně vypnout pomocí Environment::getSession()->verificationKeyGenerator = FALSE, ale to jsem nechtěl :-D).

Nesetkal jste se s tímhle problémem někdo? Nebo je to jen specifikum mojí konfigurace? :)

David Grudl
Nette Core | 8282
+
0
-

Tohle se mi v IE8 nasimulovat nepodařilo.

Každopádně verificationKeyGenerator je callback, lze ho změnit na jinou vlastní funkci.

zaxeeq
Člen | 17
+
0
-

Buďto to udělalo jen mě (asi špatná karma ;) nebo za to můžou win7 (dělalo to jak v betě tak teď v rc). Teď jsem to zkusil z xp a tam je to ok (pořád na ie8). Asi bych to nechal spát, i když možná se to bude někomu hodit až bude hledat nevysvětlitelnou ajaxovou chybku ;)

Proki
Člen | 66
+
0
-

Hlásím ten samý problém, ve Win7 a IE8 včetně režimu kompatibility s IE7 jakýkoliv ajaxový požadavek ruší současnou session. U mě např. při používání stránkování a řazení v datagridu pomocí ajaxu automaticky odhlašuje uživatele z administrace.

piler
Člen | 111
+
0
-

Neviem, ci to patri do tejto temy, ale mne sa taktiez rusi session nahodne pri poziadavkach (Vista a Google Chrome).

Ked pouzijem napr. thickbox, tak sa session zrusi vzdy. Neviem prist na to, kde moze byt problem.

Nastavenie session:

<?php
self::$session = new Session();
self::$session->setExpiration(0);
self::$session->setSavePath(TEMP_SESSION_DIR . '');
self::$session->regenerateId();
self::$session->start();
?>

Pouzivam to vlastnej aplikacii, cize nie cele nette.

David Grudl
Nette Core | 8282
+
0
-

Nemůže to způsobovat to regenerateId() ?

piler
Člen | 111
+
0
-

David Grudl napsal(a):

Nemůže to způsobovat to regenerateId() ?

Ano, je to v tom. Skusal som akurat nastavit hodnotu na FALSE, ale to nepomohlo. Rad by som ale tuto ochranu ponechal…Mas nejaky napad, co to moze sposobovat?

Dik ;)

David Grudl
Nette Core | 8282
+
0
-

session ID stačí měnit jen při operacích jako je přihlášení, odhlášení (to dělá Nette automaticky). Jindy to může vést k problémům, jako je třeba tento.

piler
Člen | 111
+
0
-

David Grudl napsal(a):

session ID stačí měnit jen při operacích jako je přihlášení, odhlášení (to dělá Nette automaticky). Jindy to může vést k problémům, jako je třeba tento.

Ok…vdaka za odpoved.