Sessions – vytváří se pořád nové soubory

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

Zdravím,

zkoušel jsem hledat, ale žádné vlákno mi nepomohlo vyřešit tento problém:

Nedaří se mi správně ukládat informace v sessions. Konkrétně při přihlašování pomocí NS\IAuthenticator. Při odeslání login formuláře se přes autentikátor ověří uživatel, provede se přihlášení ($user->isLoggedIn vrací 1). Ale po dalším reloadu (přesměrování) se informace v session neudrží – ($user->isLoggedIn vrací 0).

V configu mám:

php: # PHP configuration
		date.timezone: Europe/Prague
		session.save_path: "%tempDir%/sessions"
		zlib.output_compression: yes
		default_charset: "UTF-8"

Zjistil jsem, že po úspěšném přihlášení se ve složce %tempDir%/sessions objeví nový soubor se session, jejíž ID ale neodpovídá PHPSESSID, které se přenáší v HTTP hlavičkách mezi prohlížečem a serverem (toto PHPSESSID je pořád stejné). Při jiném načtení stránky než akce login se soubor nevytváří..

Zkoušel jsem zakomentovat v configu ten řádek s nastavením cesty k sessions, ale i tak se to chová pořád stejně..

Prosím o nakopnutí.. Díky

22
Člen | 1478
+
0
-

že by po 501. nastavení expirace session?

Dalibor
Člen | 26
+
0
-

V bootstrapu mám:

<?php
$configurator->container->session->setExpiration('+ 14 days');
?>

a v presenteru v controlu toto:

<?php
$user -> setExpiration(0, TRUE);
?>

takže bych předpokládal, že tato konkrétní session vyexpiruje zavřením prohlížeče..

Ještě si s tím zkusím pohrát, ale toto jsem zkoušel jako první :-(

Každopádně díky za radu..

Aurielle
Člen | 1281
+
0
-

Nastavení $user->setExpiration(0) způsobuje okamžité vyexpirování session. Nastav nenulový čas, nejlépe těch 14 dní. Druhý parametr (výchozí true, nemusíš uvádět) způsobí vyexpirování při zavření prohlížeče.

uestla
Backer | 799
+
0
-

https://api.nette.org/…ser.php.html#199 se tváří, jakoby nulová expirační doba opravdu znamenala odhlášení až při zavření prohlížeče – ostatně to samé je tvrzeno i v dokumentaci.

Spíš by mne zajímalo, jakým způsobem vzniká proměnná $user … ?

22
Člen | 1478
+
0
-

bych řekl asi takhle..

Editoval 22 (28. 6. 2011 22:27)

Dalibor
Člen | 26
+
0
-

Nastavil jsem expiraci sessions v bootstrapu, takze ted funguji sessions (vyzkouseno), nicmene chovani prihlasovani je porad stejne.. Pri dalsim nacteni stranky je prihlaseni zapomenuto.. Prikladam kod:

<?php
public function ownerLoginBoxSubmitted($form)
	{

		if ($form->isSubmitted() && $form->isValid()) {
			if ($form['ownerlogin']->isSubmittedBy()) {

				try {
					$user = $this->context->user;

					$user -> setAuthenticator(new \OwnerAuthenticator($this->em));

					$user -> login ($form -> values['owneremail'],$form -> values['ownerpassword']);
					$user -> setExpiration('+ 30 minutes', TRUE);


					$this->flashMessage('Uživatel byl přihlášen.','ok');

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

		}


	}
?>
22
Člen | 1478
+
0
-

nestartuje se ti session 2x? Smazal jsi staré cookie. Má opravdu ta session nastavenou expiraci? Dělá to i v jiném prohlížeči?

Dalibor
Člen | 26
+
0
-

Tak po promazání cookies už to běhá, zkusím ještě ale testnout to $user->setExpiration(0,TRUE), protože dle dokumentace by to mělo odhlašovat uzavřením prohlížeče..

Díky moc!