Nefunguje mi setExpiration

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

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)

redhead
Člen | 1313
+
0
-

musíš nastavit celé session expiration >= nejvyšši expiraci všech ostatnich

iguana007
Člen | 970
+
0
-

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
+
0
-

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
-

Zkusím to a dám vědět. Díky ;)

iguana007
Člen | 970
+
0
-

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)

David Grudl
Nette Core | 8157
+
0
-

Zkus pro sichr ještě smazat cookies.

iguana007
Člen | 970
+
0
-

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
+
0
-

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
+
0
-

Zkus to odkrokovat v nějakém IDE a zjistit, ve kterém bodě se rozhodně session smazat.

iguana007
Člen | 970
+
0
-

zkusim to az doma, xdebug se mi podarilo rozjet jen na jednom kompu (pouzivam Netbeans) a dam vedet, jestli jsem na to prisel.

zatim diky

igi

iguana007
Člen | 970
+
0
-

No asi nevim jak tuto chybu nasimulovat prostrednictvim krokovani … btw vsimnul jsem si, ze v Chrome to funguje.

iig

iguana007
Člen | 970
+
0
-

Tak problém je asi vyřešen, už mě to neodhlašuje po zavření okna … je možné, že to bylo tím, že jsem omylem 2× za sebou volal: $this->getUser()->authenticated ?

David Grudl
Nette Core | 8157
+
0
-

To asi určitě ne…