Nefunguje mi setExpiration
- iguana007
- Člen | 970
Ahoj,
snazim se vyresit problem s prihlasenim, rad bych aby uzivatel zustal
prihlaseny i pote, kdy zavre prohlizec.
Resim to v teto metode:
function formSubmitted($form)
{
try {
$values = $form->values;
$this->getUser()->authenticate($values['name'], $values['password']);
$this->getUser()->setExpiration('+ 14 days', FALSE);
$this->redirect('Dashboard:');
} catch (AuthenticationException $e) {
$form->addError( $e->getMessage() );
}
}
Ale pote, co se prihlasim … a zavru prohlizec, tak po opetovnem zapnuti prohlizece se musim prihlasovat znovu – zkousel jsem to ve FF i IE.
PHP 5.2.9 – Nette 0.9.3-dev 814b137 released on 2010–01–06
Díky za radu ;)
EDIT: me to osekava titulek vlakna a nevim proc :D usekne to vzdy posledni slovo setExpiration :)))
igi
Editoval iguana007 (22. 1. 2010 10:13)
- iguana007
- Člen | 970
Tak to nepomohlo … udělal jsem to, že jsem do bootstrapu dal:
$session = Environment::getSession();
$session->setSavePath(APP_DIR.'/sessions/');
$session->setExpiration("+ 15 days");
jak radí DG tady: https://forum.nette.org/…iration-help?p=2
a taky jsem prohodil pořadí v metodě formSubmitted:
function formSubmitted($form)
{
try {
$values = $form->values;
$this->getUser()->setExpiration('+ 14 days', FALSE);
$this->getUser()->authenticate($values['name'], $values['password']);
$this->redirect('Dashboard:');
} catch (AuthenticationException $e) {
$form->addError( $e->getMessage() );
}
}
igi
- Aurielle
- Člen | 1281
Já mám tohle (+ sessions v bootstrapu) a funguje to:
(omluvte bordel v kódu, to je ta problémová část co teď řeším
s hostingem)
public function userLogin(AppForm $form)
{
$user = Environment::getUser();
$values = $form->getValues();
if($values['remember'])
{
$user->setExpiration('+ 7 days', FALSE);
}
else
{
$user->setExpiration('+ 2 hours');
}
try
{
Environment::getUser()->authenticate($values['username'], $values['password']);
}
catch(AuthenticationException $e)
{
if($e instanceof UserBannedException)
{
$this->flashMessage('Tento uživatelský účet byl zabanován administrátorem RuneScape Wiki. Není možné se na něj přihlásit.', 'error');
}
else if($e instanceof UserInactiveException)
{
$this->flashMessage('Tento uživatelský účet není aktivní. Použijte prosím odkaz v e-mailu pro aktivaci vašeho účtu. V případě problémů kontaktuje administrátora RuneScape Wiki.', 'warning');
}
else
{
$this->flashMessage($e->getMessage(), 'warning');
}
$this->redirect(303, 'User:login');
}
$identity = $user->getIdentity();
if($identity->user_rsnick)
{
$lastupdatetime = dibi::query('SELECT [last_update_time] FROM [users_highscores] WHERE [user_id] = %i', $identity->user_id)->fetchSingle();
if(strtotime('+1 day', $lastupdatetime) < time())
{
RSWUser::updateHighscores($identity->user_rsnick, $identity->user_id);
}
}
$this->getApplication()->restoreRequest($this->backlink);
$this->flashMessage('Přihlášení bylo úspěšné. Vítejte.', 'info');
$this->redirect(303, 'Default:');
}
- iguana007
- Člen | 970
0.9.3-dev ae8347e released on 2010–01–20
Prostě mi to neběhá a nevím proč … :( Po zavření a znovu otevření browseru jsem vždy odhlášený …
Boostrap:
$session = Environment::getSession();
$session->setSavePath(APP_DIR.'/sessions/');
$session->setExpiration("+ 8 days");
Login akce:
public function userLoginFormSubmitted(AppForm $form) {
$values = $form->values;
if($values['remember']) { //zkoušel jsem dump a po zaskrtnuti checkboxu remember vrací true
Environment::getUser()->setExpiration('+ 7 days', FALSE);
} else {
Environment::getUser()->setExpiration('+ 2 hours');
}
try {
Environment::getUser()->authenticate($values['login'], $values['password']);
$this->presenter->redirect('default');
} catch (AuthenticationException $e) {
$form->addError( $e->getMessage() );
}
}
Nevíte prosím někdo, čím by to mohlo být?
Díky za každou radu
igi
Editoval iguana007 (27. 1. 2010 1:28)
- iguana007
- Člen | 970
To jsem taky zkoušel … nepomohlo … zkusim popsat co jsem vypozoroval …
Kdyz se prihlasim, tak se mi vytvori session na serveru s komplet identitou … prohlizec mi vypisuje cookie identickou s sessionid a expirace je nastavena podle te, kterou mam nastavenou v bootstrapu – coz je vse ok. Navic mam v prohlizeci jeste cookie, ktera se jmenuje nette-browser a netusim co ma delat.
Zavru prohlizec a sessna zustava na serveru – v momente, kdy prohlizec otevru znovu, a podivam se jake cookies mam ulozene, tak ta puvodne vytvorena pri prihlaseni je stale ulozena v prohlizeci a ma spravnou expiraci (tu co je nastavena v bootstrapu). Ale v momente, kdy si otevru nette aplikaci v novem tabu, tak se puvodni sessna na serveru smaze a nahradi se novou prazdnou bez identity – a zaroven mam v prohlizeci novou cookie jejiz hodnota je identicka nazvu nove vznikle session na serveru. Proste pri vstupu na url s nette aplikaci se mi puvodni session smaze a vytvori se nove.
igi
- JakubKohout
- Člen | 92
Mám podobný problém… ovšem skoro všechno funguje, přihlášení je ok … vypnu prohlížeč, zapnu prohlížeč a OK jsem přihlášenej … večer vypnu prohlížeč ráno zapnu a už nejsem přihlášenej přitom když se podívam na platnost SESSION tak je do 27. února (odpovidá to i kódu tools::MONTH)
- David Grudl
- Nette Core | 8157
Zkus to odkrokovat v nějakém IDE a zjistit, ve kterém bodě se rozhodně session smazat.