Automatické odhlášení při zavření prohlížeče

andros
Člen | 145
+
0
-

Ahoj,
udělal jsem si v Nette první aplikaci podle návodu: https://doc.nette.org/cs/quickstart

Chtěl jsem si přihlášení uživatele rozšířit o automatické odhlášení po 30min nebo při zavření prohlížeče. Přihlašování jsem proto upravil takto:

public function signInFormSucceeded($form, $values)
    {
        try {
            $this->getUser()->login($values->username, $values->password);
            $this->getUser()->setExpiration('30 minutes', TRUE);
            $this->redirect('Homepage:');

        } catch (Nette\Security\AuthenticationException $e) {
            $form->addError('Nesprávné přihlašovací jméno nebo heslo.');
        }
    }

Pokud se přihlásím a zavřu prohlížeč, po opětovném spuštění prohlížeče jsem pořád přihlášen. Co dělám špatně ?

V konfiguraci mám toto (opět podle návodu):

security:
    users:
        admin: admin
Mysteria
Člen | 797
+
0
-

Nebude to tohle (úplně dole)?

David Matějka
Moderator | 6445
+
+1
-

Ahoj, nedelas nic spatne, tohle uz v podstate nefunguje – jiz neni v podstate mozne detekovat zavreni prohlizece, viz treba http://stackoverflow.com/…sion-cookies .. a v novem nette jiz byla tato moznost zcela odebrana, viz https://github.com/…ll/103/files

andros
Člen | 145
+
0
-

Mysteria napsal(a):

Nebude to tohle (úplně dole)?

Ne ne, tohle to není. Tuhle možnost mám v chrome vypnutou.

andros
Člen | 145
+
0
-

David Matějka napsal(a):

Ahoj, nedelas nic spatne, tohle uz v podstate nefunguje – jiz neni v podstate mozne detekovat zavreni prohlizece, viz treba http://stackoverflow.com/…sion-cookies .. a v novem nette jiz byla tato moznost zcela odebrana, viz https://github.com/…ll/103/files

Aha. Tak teď už je mi to jasné.

Pokud tedy budu chtít aby mi fungovalo odhlášení po 20min nečinnosti , musím nejdřív nastavit v konfiguraci toto:

session:
    expiration: 19 minutes

Protože jinak by to asi nefungovalo, protože výchozí hodnota platnosti sessions je 180 min.

Jak to ale u výše uvedeného přihlášení udělat, aby expirovala pouze session které se používá pro přihlášení a ostatní zůstali v platnosti délé (standartní dobu 180min) ?

jarda256
Člen | 130
+
0
-

@andros Ahoj, já mam třeba v configu nastaveno expiration: 14 days a při login mám nastaveno takto $this->user->setExpiration($values->remember ? '14 days' : '20 minutes'); tzn. pokud uživatel zaškrtnul pamatovat si mě, tak mu to nastav na 14 dní a pokud ne tak přihlášení vyprší za 20 minut neaktivity

Eflyax
Člen | 5
+
0
-

Mohu se prosím zeptat, jak je to třeba řešené na ČSFD? Také to jede na nette a dle mě to funguje naprosto spolehlivě.
Pokud se přihlásím bez „Pamatovat si mě“ tak po zavření prohlížeče jsem odhlášený. Pokud zaškrtnu „Pamatovat si mě“, tak zůstanu přihlášený i po zavření prohlížeče.

Jak mám řešit situaci, kdy tuto funkcionalitu zákazník požaduje? Nemohu mu říct, že to nejde, když to vidí funkční na jiných webech (na nette).

Kcko
Člen | 465
+
0
-

Eflyax napsal(a):

Mohu se prosím zeptat, jak je to třeba řešené na ČSFD? Také to jede na nette a dle mě to funguje naprosto spolehlivě.
Pokud se přihlásím bez „Pamatovat si mě“ tak po zavření prohlížeče jsem odhlášený. Pokud zaškrtnu „Pamatovat si mě“, tak zůstanu přihlášený i po zavření prohlížeče.

Jak mám řešit situaci, kdy tuto funkcionalitu zákazník požaduje? Nemohu mu říct, že to nejde, když to vidí funkční na jiných webech (na nette).

Máš bud možnost nastavit si expiraci třeba na půl roku, ale s tím, že si uděláš vlastní skladiště session souborů, protože nativně na každém PHP hostingu to má „výdrž“ kolem 20 minut (při neaktivitě); případně poté co zavřeš browser.

Nebo si uložíš nějaký Hash to COOKIE a budeš to nějakou svojí logikou ověřovat, zda-li tento Hash souhlasí s nějakým uživatelským účtem a uživatele přihlásíš.