Přihlášení vydrží pouze redirect z přihlašovacího formuláře

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

Zdravím.
Po přihlášení mám problém s udržením identity přihlášeného uživatele.
Nastavenou expirace uživatele:

public function submittedSignInForm(EForm $form)
{
	$values = $form->getValues();

	$this->member->setExpiration('+ 30 minutes', TRUE);

	try
	{
		$this->member->login($values['login'], $values['heslo']);
		$this->redirect('Info:');
	}
	catch(AuthenticationException $e)
	{
		$form->addError($e->getMessage());
	}
}

Nastavení expirace session v bootstrapu:

$session = Environment::getSession();
$session->setExpiration('+ 7 days');
$session->setSavePath(TEMP_DIR.'/sessions/');
$session->start();

Když se po přihlášení kouknu do souboru se session, jsou tam veškerá data v pořádku. Dám obnovit stránku nebo kliknu na odkaz a data o uživateli ze session zmizí.

Používám uvolněnou alfaverzi 2.0

Jan Tvrdík
Nette guru | 2595
+
0
-
  • Projevuje se chyba ve všech prohlížečích?
  • Když si prohlídneš nějakým nástrojem cookie se session ID, je v pořádku?
  • Zkus zakomentovat $session->setSavePath(...).
Ondřej Mirtes
Člen | 1536
+
0
-

Co to je $this->member? Proč ne $this->getUser()?

Šolim
Člen | 20
+
0
-

Omlouvám se že píšu do tématu, co je staré 2 roky.
Nicméně mám úplně stejný problém, co je zde popsaný…Nevíte prosím někdo jak to vyřešit, aby ta identita uživatele nemizela?

petr.pavel
Člen | 535
+
0
-

Otázky Honzy Tvrdíka nadále platí. Budeš nám muset poskytnout víc informací.

Šolim
Člen | 20
+
0
-

Chyba se skutečně projevuje ve všech prohlížečích.
Session ID je uložené v cookies s názvem PHPSESSID? V ní je jak před zalogováním tak po zalogování stejná hodnota.
$session->setSavePath(…) tam vůbec nikde nemám… používám jako základní kostru webu sandbox nejnovějšího nette: NetteFramework-2.0.8-PHP5.3

Authenticátor používám v defaultním nastavení. Zalogování proběhne správě… po jakékoliv přesměrování (kliknutí na odkaz, $this->redirect();, submit form) dochází ke ztrátě identity.

//edit
ještě bych měl dodat, že u mě na localu vše funguje jak má,… problém se vyskytuje na ostrém hostingu, možná je problém někde v nějakém jeho nastavení… ale nevím v jakém

Editoval Šolim (23. 2. 2013 14:36)

petr.pavel
Člen | 535
+
0
-

Vypadá to, že se ti data session z nějakého důvodu neuloží. Budeš muset zjistit, kam se na tvém serveru ukládají, a podívat se, co se tam děje. Kam se ukládají, zjistíš nejlépe přes phpinfo() v části Session / session.save_path.

Osobně bych úložiště nastavoval, abych měl všechna data od Nette pohromadě a ne v nějakém adresáři, kam by se s trochou smůly mohl dostat i jiný uživatel.

Cestu nastavuji raději v config.neon než v bootstrap.php přes setSavePath().

	php:
		#session.save_path: "%tempDir%/sessions"

	nette:
		session:
			savePath: '%tempDir%/sessions'	# stejné jako session.save_path nahoře v php
Šolim
Člen | 20
+
0
-

Díky za odpověd.
No session jako také mam odzkoušené, že fungují… ukládají se prý do defaultního adresáře. Neboť nemají natavenou žádnou cestu. Přikládám phpinfo:
http://physics.mff.cuni.cz/…/phpinfo.php

savePath jsem nastavil v configu, jak píšeš, a nyní se mi ve složce /tmp/session generují sessions soubory

nicméně identita uživatele se mi stále strácí

Editoval Šolim (23. 2. 2013 19:01)

enumag
Člen | 2118
+
0
-
  • Ta sušenka (cookie) PHPSESSID zůstane i poté se identita ztratí?
  • Je v adresáři sessions vytvořen soubor s názvem odpovídajícím hodnotě toho cookie?
  • Můžeš se v debugbaru podívat na obsah session? (V Nette na to sice je panel, ale tenhle je lepší.)
  • Jsi si jistý že někde omylem nevoláš logout po tom přesměrování?

To je tak vše co mne v tuto chvíli napadá. ;-)

Šolim
Člen | 20
+
0
-

v PHPSESSID zústává pořád.
V adresáři session je skutečně soubor s názvem odpovídající hodnotě cookies PHPSESSID

Ten debugbaruse mi nedaří rozeběhnout. Hlásí to:
Found sections ‚extensions‘ in configuration, but corresponding extensions are missing.
Asi se ještě musí něco přidat do boostrapu.php odpovídající extensions… ale nepodařilo se mi najít jaké

To už mi napadlo hodně dávno… zda se nějakým způsobem nevolá logout :)… ale bohužel ani tohle to nedělá.

Editoval Šolim (23. 2. 2013 20:45)

enumag
Člen | 2118
+
0
-

Jo on ten session panel vyžaduje Nette 2.1, zapomněl jsem na to. Srry. :-/ Pro 2.0 existuje addon, ale je tam ještě jiná nekompatibilita. Zkus ten jednoduchý session panel co je v Nette.

Dále si zkontroluj že nikde do session neukládáš objekty – na těch to může snadno selhat pokud nejdou serializovat aniž by to zahlásilo chybu. Jednou jsem takhle do session omylem ukládal ActiveRow a divil se že to neběhá.

Šolim
Člen | 20
+
0
-

Je to zvláštní… Ten panýlek na session se mi už podařilo rozeběhnout. Obsahuje přesně to co bych očekával. Všechny hodnoty session se v něm udržují přesně jak mají kromě té, která obsahuje identitu uživatele… ta se udrží je po prvotním přihlášení… po jakékoliv následujícím redirectu se smaže.

Do session objekty neukládám…

Chápu, že tenhle problém… je jen těžko uvěřitelný… ale je tomu skutečně tak… nějaký další nápad? :)

enumag
Člen | 2118
+
0
-

Hmm… je to long-shot ale zkusil bych porovnat hodnoty session direktiv v phpinfo s těmi z localhostu jestli tam nebude něco podezřelého.

Už mi ale nějak docházejí nápady. :-( Zkus se zeptat admina serveru jestli ho nenapadá nějaký důvod. Jinak mi asi nezbývá než ti popřát pevné nervy. ;-)

EDIT: Počkej… nepoužíváš náhodou nějakou vlastní třídu Identity? Pokud ano, od čeho ji dědíš?

Editoval enumag (23. 2. 2013 21:59)

Šolim
Člen | 20
+
0
-

Bohužel…ani vlastní třídu identity nepoužívám… opravu jen to co je po stažení v nette v sandboxu.

enumag
Člen | 2118
+
0
-

Zkus hned po přihlášení před přesměrováním dumpnout identitu a hoď sem výsledek jestli se náhodou nějaké objekty nedostaly tam (neměly by, vyloženě střílim od boku).

Šolim
Člen | 20
+
0
-

Dump identity ihned po přihlášení:

dump(\Nette\Environment::getUser()->getIdentity());

Nette\Security\Identity(4) {
   id private => 2.0
   roles private => array(1) [
      0 => "admin" (5)
   ]
   data private => array(6) {
      ID => 2.0
      JMENO => "jméno" (6)
      PRIJMENI => "příjmení" (5)
      LOGIN => "admin" (5)
      EMAIL => "email@email.cz" (20)
      ROLE => "role" (5)
   }
   frozen private => FALSE
}

Já bych jsme klidně hodili odkaz na ten web i přihlašovací údaje, aby jsi to mohl lépe zkouknout… ale bojím se aby mi to tam třeba nějaký šotek tam nerozvrtal, když mi tam nefunguje to logovaní.. a cmsko je ted přístupné odkudkoliv komukoliv :). Kdyžtak jen soukromě přes email. Nicméně velmi děkuji za snahu!

enumag
Člen | 2118
+
0
-

Netuším jestli to může nějak souviset, ale proč je proboha id float? :-O Anebo se integery dumpujou takhle?

E-mail mám v profilu, ten problém mne zaujal takže bych se na to zkusil mrknout. Ale nic neslibuju. ;-)

EDIT: Ještě mne napadá, je něco v $user->getLogoutReason()?

Editoval enumag (23. 2. 2013 23:45)

JakubTN
Bronze Partner | 49
+
0
-

Integery sa urcite dumpuju ako cele cislo, ziadne desatinne miesto sa tam nezobrazuje.

Ja tiez strelim od boku, skusil si na tom produkcnom prostredi pustit requirements checker? Mozno by nasiel nieco zaujimave…

Šolim
Člen | 20
+
0
-

enumag:
Díky… podrobnosti jsem zaslal emailem.

Tak web běží na oracle db kde mam ID nastavený jako number… a je v ní asi veden jako float, přímo integer jsem u oracle nenašel… zatím jsem se nesetkal, že by to byl nějaký výraznější problém.

Checker hlásí, že bylo být vše v pořádku:
http://physics.mff.cuni.cz/…/checker.php

//edit
dump($user->getLogoutReason()); hlásí NULL

Editoval Šolim (24. 2. 2013 0:18)

petr.pavel
Člen | 535
+
0
-

Vzpomněl jsem si, že mě kdysi odhlašoval obrázek, který jsem posílal prohlížeči přes akci presenteru. V hlavním prezenteru jsem měl všechno ok, identita byla, ale protože zobrazená stránka obsahovala obrázek, který mě odhlásil, kamkoliv jsem klikl, už jsem byl odhlášený. Dost specifický případ, ale třeba tě to inspiruje.

Šolim
Člen | 20
+
0
-

Tak problém byl vyřešen stejným způsobem… jako vznikl :)
Prostě to logování najedou začalo fungovat správě a identita uživatele se neztrácí.
Rád bych hodil nějaký report… ale bohužel… problém jsem ještě předtím řešil se správcem serveru… ale na nic jsme nepřišli.