Jak nastavit expiraci sessiony?

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

Ať dám tenhle kód kamkoli do bootstrapu, klidně hned na začátek po includnutí samotného Nette:

Nette\Environment::getSession()->setExpiration('+ 2 days', false);

Pořád dostávám:

Unable to set 'session.gc_maxlifetime' to value '172800' when session has been started.

Co dělám špatně?

josef.sabl
Člen | 153
+
0
-

Tak do toho pánové civím a vypadá to na nějaký divný bug v Nette nebo někde jinde? Jde o řádek 452 v souboru Session.php.

if (defined('SID')) {

SID je definováno, nicméně prázdné, takže …

if (defined('SID') && SID === null) {

zcela řeší můj problém.

Editoval josef.sabl (5. 12. 2012 17:36)

MartinitCZ
Člen | 580
+
0
-

Nepoužívej Environment a koukni do dokumentace.

Editoval martinit (5. 12. 2012 17:38)

josef.sabl
Člen | 153
+
0
-

Máš na mysli:

$container->session->setExpiration('+ 2 days', false);

Stejný problém…

Tak jsem to původně měl a k Environment jsem se uchýlil v rámci prvních snah o vyřešení mého problému.

Editoval josef.sabl (5. 12. 2012 17:49)

ViPEr*CZ*
Člen | 817
+
0
-

Dejte si to do config.neon:

nette:
	session:
		autoStart: smart
		expiration: +365days
josef.sabl
Člen | 153
+
0
-

Geniální, díky, škoda, že se o tom nepíše v dokumentaci :-)
Btw, má potom funkce setExpiration() nějaký význam?

ViPEr*CZ*
Člen | 817
+
0
-

josef.sabl napsal(a):

Geniální, díky, škoda, že se o tom nepíše v dokumentaci :-)
Btw, má potom funkce setExpiration() nějaký význam?

Myslím, že to je v sandboxu, ze kterého je dobré vždy vycházet. V dokumentaci to někde možná taky je… proč nejde ta funkce nevím… musí odpovědět někdo kompetentnější. ;-)

josef.sabl
Člen | 153
+
0
-

Jasný, to bylo zase jenom takové přátelské rýpnutí do stavu dokumentace Nette :)

Vím, že bych mohl sám přiložit ruku k dílu, ale asi na to zatím nemám.

Btw, sám jsem pak v neonu našel, že tam mám expiration: 0, ale když prostě nevíš, že to tam je, tak to nenajdeš a když se v ofiko dokumentaci píše, že se to dělá jinak, tak prostě tě to nenapadne a hledáš, kde máš chybu :)

josef.sabl
Člen | 153
+
0
-

ViPErCZ napsal(a):

Dejte si to do config.neon:

nette:
	session:
		autoStart: smart
		expiration: +365days

Můžu doplňující dotaz? A jak zajistit, aby sessiona neexpirovala při vypnutí prohlížeče?

EDIT: Už jsem na to přišel :)

nette:
	session:
		autoStart: smart
		expiration: +2days
		cookieLifetime: +2days

Editoval josef.sabl (12. 12. 2012 9:21)

mildhouse
Člen | 27
+
0
-

setExpiration() má přece význam, že můžete nastavit expiraci určité sekci :

$section = $this->getSession('section');
$section->setExpiration('+ 3 seconds');
Aurielle
Člen | 1281
+
0
-

ViPErCZ napsal(a):

Dejte si to do config.neon:

nette:
	session:
		autoStart: smart
		expiration: +365days

Zjistil jsem, že dávat roční expiraci je u aplikace s větším počtem uživatelů overkill. Pak máš nechutný počet sessionů v tempu a u nás na serveru to nebyl bash schopen ani vylistovat (tzn. rm -rf vracelo chybu).