Nekonečná smyčka při startování Session
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- Milo
 - Nette Core | 1283
 
Pokud si do session uložíte objekt, který ve své __wakeUp
metodě používá SessionNamespace, tak dojde k zacyklení.
Použije-li se SessionNamespace je zavoláno
session_start(), unserializují se data, zavolá se
__wakeUp objektů, a pokud je ve __wakeUp opět
použito SessionNamespace vznikne smyčka.
// Původní kód
Debug::tryError();
session_start();
if (Debug::catchError($msg)) {
	@session_write_close(); // this is needed
	throw new InvalidStateException($msg);
}
self::$started = TRUE;
// Moje oprava
Debug::tryError();
self::$started = TRUE;
session_start();
if (Debug::catchError($msg)) {
	self::$started = FALSE;
	@session_write_close(); // this is needed
	throw new InvalidStateException($msg);
}
Nevím, jestli je to košér oprava a zda se o to má framework starat, smyčky se dá snadno dosáhnout i bez frameworku.
class Loop
{
    public function __wakeUp()
    {
        session_start();
    }
}
session_start();
$_SESSION['loop'] = new Loop();
				
- David Grudl
 - Nette Core | 8285
 
Asi není správné, aby wakeup prováděl něco mimo objekt a třeba spouštěl session.

- Milo
 - Nette Core | 1283
 
Správné to asi není, také jsem svůj kód přepracoval. Nicméně trvalo mi dost dlouho, než jsem kápnul na to, proč to loopuje. Pomohlo by i:
if( self::$startInProgress )
{
    throw new InvalidStateException("Session start is in progress. You can not start session again.");
}
self::$startInProgress = TRUE;
session_start();
self::$startInProgress = FALSE;