Platnost session přihlášení

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

Můj cíl je takový:
zaškrtávátko u přihlašovacího formu „zůstat přihlášen“. Pokud je zaškrtnuto, session se uchová i po zavření okna prohlížeče (1 rok), jinak po zavření vyprší.
Nevím jestli session rozumím dobře, ale neumím toho docílit.
V matodě přihlášení nastavuji session jako:

$this->user->setExpiration(0); //dočasné přihlášení
nebo
$this->user->setExpiration("+ 1 year"); //trvalé přihlášení

Pokud ve startupu base presenteru nastavím session na

$this->session->setExpiration("+1 year");

Umožní mi to pamatovat si trvalé přihlášení, ale po zavření prohlížeče session neexpiruje

Pokud ve startupu basepresenteru nastavím

$this->session->setExpiration(0);

vyprší session po zavření okna prohlížeče, ale zase nemůžu nastavit trvalé přihlášení, protože čas, který chci nastait je větší než nastavení session.

Je možné nějak vyřešit, aby fungovaly obě varianty najednou? Myslel jsem, že nastavení expirace pro usera by mělo mít přednost, takže když mu nastavím session na 0 i když je celkově session na 1 rok, tak to usera zapomene, ale zjevně se to neděje.

Díky předem za rady.

Tabetha
Člen | 140
+
0
-

Podľa dokumentácie … takže by si si tam mal dať 2. parameter, kde ccheš, aby ti session vypršala po zavretí prehliadača

// přihlášení vyprší po 30 minutách neaktivity nebo zavření prohlížeče
$user->setExpiration('+ 30 minutes', TRUE);

// přihlášení vyprší po 2 dnech
$user->setExpiration('+ 2 days', FALSE);

// odhlásit uživatele až zavře prohlížeč (bez časového limitu)
$user->setExpiration(0, TRUE);
Merllinn
Člen | 28
+
0
-

Ahoj, díky za reakci, ale mám za to, že true je by default, že se nastavuje druhý parametr false až když nechceš, aby session po zavření prohlžeče expirovala.
Nicméně pokud expiraci nastavím na

$this->user->setExpiration(0, true);

chová se aplikace stejně, pamatuje si uživatele i po zavření okna.
V session uživatele je expireBrowser ⇒ NULL nehledě na tom, jestli nastavím session expiraci po zavření nebo ne, to taky nevím jestli je normální.

o5
Člen | 416
+
0
-

Mám stejný problém. Koukal jsem do sandboxu a podle všeho to mám podobně:

config.neon

nette:
    session:
        expiration: 14 days
        save_path: %tempDir%/sessions

AuthPresenter.php

function loginFormSucceeded(\Nette\Application\UI\Form $form)
{
    if ($form->values->remember) {
        $this->getUser()->setExpiration('14 days', FALSE);
    } else {
        $this->getUser()->setExpiration('20 minutes', TRUE);
    }

    ...
}

Otevřu poprvé stránku v browseru (nemám cookie PHPSESSID). Odešlu přihlašovací formulář bez zaškrtávacího tlačítka „remember“ a po redirectu mám expiraci cookie PHPSESSID nastavenou na Mon, 3 Mar 2014 (14dní místo 20minut).

Co dělám špatně?

Google Chrome 32.0.1700.107
Nette Framework 2.2-dev (aktuální master)
Apache/2.2.24 (Unix) DAV/2 PHP/5.5.5 mod_ssl/2.2.24 OpenSSL/0.9.8y

Editoval o5 (17. 2. 2014 19:38)

Merllinn
Člen | 28
+
0
-

U mě byl problém v tom, že jsem v průběhu životního cyklu volal metodu clean(). Tu není možné volat, jinak se aplikace začne chovat takhle podivně. Nevoláš ji někde?

jiri.pudil
Nette Blogger | 1029
+
0
-

Nic neděláš špatně. Platnost session je 14 dnů, přesně jak máš nastaveno v configu. Platnost přihlášení si Nette hlídá jinak.

o5
Člen | 416
+
0
-

@jiri.pudil: Díky moc, to jsem nevěděl a nikde nenašel :))