Nette\Web\Session, jquery.nette.js a IE 8

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

Nette: 0.9, rev 475

jquery.nette: 0.2

IE: 8.0.7100.0

Windows: 7, RC1 build 7100

Při výše uvedené kombinaci mi nefunguje Nette\Web\Session.
Pokud v ajaxovém požadavku nastavím do session nějakou hodnotu, dám reload stránky, tak hodnota je pryč. V Opeře, FF, Chrome vše funguje normálně.

Pro níže uvedený kód:

IE8: „Nastav test“ (neajax), vypíše se „Má hodnotu“, Reload, vypíše se „Má hodnotu“

IE8: „Nastav test – AJAX“, vypíše se „Má hodnotu (od ajaxu)“, Reload, vypíše se ""

FF, Opera, Chrome: „Nastav test – AJAX“, vypíše se „Má hodnotu (od ajaxu)“, Reload, vypíše se „Má hodnotu (od ajaxu)“

Presenter:

<?php
class SessionPresenter extends Presenter
{
	public function renderDefault() {
		$this->invalidateControl("content");
		$session = Environment::getSession("test");
		$this->template->test = (isset($session->test)) ? $session->test : "" ;
	}

	public function handleNastavTest() {
		$session = Environment::getSession("test");
		$session->test = ($this->isAjax()) ? "Má hodnotu (od ajaxu)" : "Má hodnotu";
		if( !$this->isAjax() )
			$this->redirect("this");
	}

	public function handleVymazTest() {
		$session = Environment::getSession("test");
		unset($session->test);
		$this->redirect("this");
	}
}
?>

Template:

<?php
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
		<script type="text/javascript" src="js/jquery.nette.js"></script>
	</head>

	<body>
		{snippet content}
			Test: "{$test}"<br>
			<a href="{plink nastavTest!}">Nastav test</a><br>
			<a href="{plink nastavTest!}" class="ajax">Nastav test - AJAX</a><br>
			<a href="{plink vymazTest!}">Vymaz test</a><br>
		{/snippet}
	</body>
</html>
?>

Editoval Foowie (5. 8. 2009 17:28)

timbulko
Člen | 85
+
0
-

Tiež som sa s týmto pred pár dňami stretol. Najskôr som nechápal o čo ide, pretože ma pri každom ajaxovom requeste v IE 8 odhlasovalo.

romansklenar
Člen | 655
+
0
-

Zkusil jsem to teď na té samé kombinaci softwaru a potvrzuju – nefunguje.

PetrP
Člen | 587
+
0
-

jj už se to tady několikrát řešilo, taky to nefunguje když si flash odesílá neco na server (at už uploadovací, nebo že si stahuje třeba nějaké xml)

prozatimnim řešením bylo asi vypnout kontrolu user-agenta

mluvi se o tom např tady

Editoval PetrP (5. 8. 2009 19:53)

Honza Kuchař
Člen | 1662
+
0
-

S flashem je chyba někde trochu jinde (ve FF se odesílají cookies IE), ale výsledek je stejný. Nefunguje session.

Foowie
Člen | 269
+
0
-

Prozatím funkční řešení je teda (jak je psáno v odkazovaném vlákně) odebrat Accept-Language ze seznamu metody generateVerificationKey a znovu ji zaregistrovat.

Upravená metoda:

<?php
	public function generateVerificationKey_IE8HACK()
	{
		$list = array('Accept-Charset', 'Accept-Encoding', 'User-Agent');
		$key = array();
		$httpRequest = $this->getHttpRequest();
		foreach ($list as $header) {
			$key[] = $httpRequest->getHeader($header);
		}
		return md5(implode("\0", $key));
	}
?>

Registrace:

<?php
	Environment::getSession()->verificationKeyGenerator = array($this, 'generateVerificationKey_IE8HACK');
?>

Editoval Foowie (6. 8. 2009 9:21)

PetrP
Člen | 587
+
0
-

honzakuchar napsal(a):

S flashem je chyba někde trochu jinde (ve FF se odesílají cookies IE), ale výsledek je stejný. Nefunguje session.

Tak s tím problémem sem se nesetkal, já se setkal taky v IE8 kdy flash komunikuje ze serverem, a odhlasí mě.

David Grudl
Nette Core | 8229
+
0
-

V aktuální verzi Nette bug IE8 pořešen.