Nette\Web\Session, jquery.nette.js a IE 8
- Foowie
- Člen | 269
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)
- PetrP
- Člen | 587
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
Editoval PetrP (5. 8. 2009 19:53)
- Honza Kuchař
- Člen | 1662
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
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)