Předčasná session expirace

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

Mám takový problém, v bootstrapu je normálně nastavené:

$configurator->addConfig(__DIR__ . '/config/config.neon');
$container = $configurator->createContainer();
$container->session->setExpiration('+ 14 days');
$container->session->setSavePath(SESSIONS_DIR);
if ($container->session->exists()) {
	$container->session->start();
}

A handler submitted přihlašovacího formuláře vypadá takto:

public function signInFormSubmitted($form)
	{
		try {
			$values = $form->getValues();
			if ($values->remember) {
				$this->getUser()->setExpiration('+ 14 days', FALSE);
			} else {
				$this->getUser()->setExpiration('+ 12 hours', TRUE);
			}
			$this->getUser()->login($values->username, $values->password);
			$this->redirect('Chat:');

		} catch (NS\AuthenticationException $e) {
			$form->addError($e->getMessage());
		}
	}

Jenže se mi stává, že se mi i přesto uživatel po cca půl hodině odhlásí. Když se podívám ve firefoxu do cookies tak má expiraci nastavenou normálně do + 14 dní.
Takže se ptám, nevíte někdo čím to?

iguana007
Člen | 970
+
0
-

Cookie sice má +14 dní, ale má to i session na serveru? Podívej se do phpinfo() jakou mají session nastavenou expiraci.

Keksa
Člen | 23
+
0
-

iguana007 napsal(a):

Cookie sice má +14 dní, ale má to i session na serveru? Podívej se do phpinfo() jakou mají session nastavenou expiraci.

Ha, to bude ono, díky moc.

Keksa
Člen | 23
+
0
-

Hmm, tak i přesto, že jsem na serveru nastavil session.gc_maxlifetime na 1209600 sekund (14 dní) tak se to odhlásí. Nastavuju to sice přes ini_set, ale to by snad nemělo vadit, když ini_get pak v pořádku tu hodnotu zobrazí. Na wedos hostingu to ani jinak nezměnim.

Nastavení sessions v bootstrapu:

ini_set('session.gc_maxlifetime',1209600);
$container->session->setExpiration('+ 14 days');
$container->session->setSavePath(SESSIONS_DIR);
// Opens already started session
if ($container->session->exists()) {
	$container->session->start();
}
Keksa
Člen | 23
+
0
-

Takže hosting wedos bohužel nepodporuje funkci ini_set pro tento parametr (podle uživatelské podpory). Moje otázka tedy je, jestli se dá při přihlášení User a Identity použitelně uložit například do cookie, namísto session na serveru?

Editoval Keksa (29. 2. 2012 0:43)

David Grudl
Nette Core | 8228
+
0
-

gc_maxlifetime není potřeba nastavovat, řeší to setExpiration().

Keksa
Člen | 23
+
0
-

David Grudl napsal(a):

gc_maxlifetime není potřeba nastavovat, řeší to setExpiration().

Kdyby ses podíval na moje předchozí příspěvky, tak bys viděl, že setExpiration() používám už od začátku a přesto session cca po půl hodině expiruje.

22
Člen | 1478
+
0
-

@Keksa: trošku mě překvapilo, že wedos takové nastavení neumožňuje. Jinak ukládat citlivé informace o přihlášení do cookie není určitě dobrej nápad.

Keksa
Člen | 23
+
0
-

22 napsal(a):

@Keksa: trošku mě překvapilo, že wedos takové nastavení neumožňuje. Jinak ukládat citlivé informace o přihlášení do cookie není určitě dobrej nápad.

Jo, tak to mě taky. Souhlasím, že to není dobrej nápad, ale jediné řešení jaké mě napadá, je tahat všechno z databáze při každém reloadu stránky, což je naprosto nepoužitelné, protože by to imho neúměrně zatěžovalo server.

Editoval Keksa (29. 2. 2012 14:12)

David Grudl
Nette Core | 8228
+
0
-

Třeba by stačilo si pohrát s session.gc_divisor a session.gc_probability

Keksa
Člen | 23
+
0
-

David Grudl napsal(a):

Třeba by stačilo si pohrát s session.gc_divisor a session.gc_probability

To je právě to, nemůžu. Hosting Wedos to neumožňuje. Viz http://kb.wedos.com/…ace-php.html – jiné parametry měnit nelze a to ani pomocí funkce ini_set přímo v php. Psal sem na podporu, jestli by to nezvedli lokálně, tak uvidím.

EDIT: Tak mě odbyli, že to není možné a že pokud si to chci nastavit ať si objednám VPS.

Editoval Keksa (29. 2. 2012 19:38)

Keksa
Člen | 23
+
0
-

Existuje nějaký způsob jak manuálně znovuvytvořit tu samou session user/identity, v době kdy by měla expirovat?