Platnost session přihlášení
- Merllinn
- Člen | 28
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
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
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
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)
- jiri.pudil
- Nette Blogger | 1029
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.