Session svázaná s přihlášeným uživatelem

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

Ahoj,

narazil jsem na problém se session a nejsem si jistý, jak ho správně řešit.

Jde o to, že přihlášenému uživateli ukládám při vyplnění formuláře do session aktuální hodnoty, aby se použili jako výchozí pro příště.

use Nette\Http\Session;

class MyForm extends Control
{
    /** @var Session */
    private $session;

	public function __construct(Session $session)
    {
        parent::__construct();
        $this->session = $session->getSection(MyForm::class);
    }

	public function onFormSuccess($values)
	{
		$this->session->values = values;
	}
}

Když se ale tento uživatel odhlásí a přihlásí se jiný (stejné PC i browser), má v session data od toho předchozího uživatele.

Toto chování je samozřejmě nežádoucí.. Zajímalo by mě, jestli Nette tento usecase nějak řeší?

Napadlo mě tyto výchozí hodnoty formuláře uložit do Identity, ale nepřipadá mi to jako správné řešení.

Editoval Barvoj (17. 10. 2016 16:06)

idiox
Člen | 14
+
+3
-

Ahoj, koukni tady a uplně dole je ještě Známá omezení. Asi ti to bere session id pořád z té existující cookie.

edit

Přidej do logout metody

<?php

$this->session->destroy();

?>

Ale když ty data budeš chtít zachovat pro příští přihlášení, tak je budeš muset ještě někam uložit samozřejmě. Nebo můžeš sekci pojmenovat specificky pro uživatele.. ale nejsem si jistej, jestli je to zcela ok.

K mazání ještě mrkni tady a můžeš zkusit callback $this->user->onLoggedOut[] viz zde

A jde to i přes config.neon .. je fakt kouzelnej :D

Editoval idiox (17. 10. 2016 16:58)

Barvoj
Člen | 60
+
0
-

Díky, tušil jsem, že to budu muset mazat ručně :P

CZechBoY
Člen | 3608
+
0
-

Tohle kompletně smaže identitu uživatele

$user->logout(true);

Editoval CZechBoY (18. 10. 2016 10:01)

Barvoj
Člen | 60
+
0
-

CZechBoY napsal(a):

Nebo

$user->logout(true);

To právě smaže jenom identitu..

Právě jsem si říkal, jestli bych informace, které jsou svázané s uživatelem, neměl do identity ukládat? Protože ta se chová přesně jak bych potřeboval: uložím to tam přihlášenému uživateli a když se přihlásí někdo nový, tak se původní identita smaže a vytvoří se nová. Ideální.

Jen si nejsem jistý, jestli je Identita myšlena k tomuto použití. Zatím jsem do ní vždycky jen naházel pár informací o uživateli při přihlášení.. Teď bych do ní ale chtěl za běhu přidávat další informace jak se uživatel proklikává aplikací… Je to správné použití Identity? Ukládat do ní výchozí hodnoty formulářů? Kolega mi tvrdil, že v nové verzi Nette je Identita read only..

Editoval Barvoj (18. 10. 2016 9:36)

CZechBoY
Člen | 3608
+
+1
-

Ajo, no já se o řádek překoukl a taky potom používám $this->session->destroy()

idiox
Člen | 14
+
0
-

Tak mě napadá, jestli se to někdy může hodit, že se ta session nezničí? :)