session_regenerate_id() – warning (z neznámého důvodu)

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

Ahojte, po delší době se ozývám, bohužel s chybkou,
zatím za neznámých okolností se občas v logu objeví tato chyba:

[07-Jun-2011 16:12:30] PHP Warning:  session_regenerate_id(): Session object destruction failed in D:\data\web\services\uschovna\PHP\libs\Nette\Web\Session.php on line 218

Netušíte někdo, proč to nastává? Na php.net nic kloudného nepíšou. Možná snad se snaží Nette regenerovat session, když už neexistuje?

Mám chuť zapnout Nette\Debug ve strict módu, z toho budeme asi o dost moudřejší…

Nette verze 0.9.5.

radas
Člen | 221
+
0
-

Mě se toto objevuje v konzoli Loggeru v případě, kdy komunikuji přes AJAX, tedy v signálu. Nette 2.0 beta.

Honza Kuchař
Člen | 1662
+
0
-

A nestačilo by tedy tu fci volat jen tehdy, pokud ještě nebyl odeslán výstup a pokud existuje session relace?

radas
Člen | 221
+
0
-

Mi už se nejspíš podařilo najít místo v kódu, které to způsobuje. V presenteru, kde mám i metodu pro signál handleXyz(), tak v metodě startup() používám přihlášení

$this->user->login(...);
$this->user->setAuthorizationHandler(new Acl());

Pokud ho obalím podmínkou

if (!$this->isAjax())
{
  $this->user->login(...);
  $this->user->setAuthorizationHandler(new Acl());
}

tak už pak k tomu varování nedochází.

Vyki
Člen | 388
+
0
-

A startujete session už v bootstrapu?

if(!$session->isStarted()) $session->start();
radas
Člen | 221
+
0
-

Ano, hned po require ‚loader.php‘ takto:

$session = NEnvironment::getSession();

if (!$session->isStarted())
  $session->getNamespace('loremIpsum');
Honza Kuchař
Člen | 1662
+
0
-

Vyzkouším… (chce to déle testovat…)

//EDIT: Warning je tam zase.

David Grudl
Nette Core | 8129
+
0
-

Tohle je systémová chyba generovaná funkcí session_regenerate_id()

Honza Kuchař
Člen | 1662
+
0
-

O tom vím, ale zatím se mi pořád nepodařilo vyzkoumat přesné podmínky, kdy se ten warning vygeneruje. Netušíte někdo?

joe
Člen | 313
+
0
-

K týhle chybě jsem se právě dostal a chtěl bych nějak oznámit uživateli, že došlo k chybě a ne vyhodit chybu na serveru.

Jak se k chybě dostat – používám prohlížeč Operu, stačí mít nějaký přihlašovací formulář, prvně se přihlásit a nechat uložit údaje. Odhlásit se a znovu zobrazit ten form. Pak místo vyplněním údajů dakrát (rychle) kliknout na ikonku klíčku, která automaticky vyplní formulář a odešle. Vyskočí mi tahle chyba.

Nápady jak se toho zbavit?

bauer01
Člen | 30
+
0
-

Já se s tím setkávám pokud nasměruju sessions do jiné složky, např. temp Nette, následně se to pak děje jen při přihlašování či odhlašování uživatele. Tipuju to na nějaké špatné oprávnění pro danou složku, viz. http://webomania.wordpress.com/…ailed-error/

A taky se s tím setkávám jen na Win serveru.

Honza Kuchař
Člen | 1662
+
+1
-

Že by tento človíček našel řešení?
http://webomania.wordpress.com/…ailed-error/#…

David Grudl
Nette Core | 8129
+
0
-

Jenže v nette se vždycky volalo session_regenerate_id s TRUE…

bauer01
Člen | 30
+
0
-

hele co je v changelogu PHP 5.3.9 https://bugs.php.net/bug.php?…