Po redirectu z loginu nette zahodí identity ze session

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

u nette09 sem tento problém neměl u nette2 mám problém ve všech prohlížečích jde o dev verzi

tady je 2 roky starý problém, před redirectem vše uloženo jak má být po redirectu už session neobsahuje identity uživatele a tvrdí, že není přihlášen

https://forum.nette.org/…po-redirectu

dodám že to platí pouze pro

Nette.Http.UserStorage/admin

vše ostatní v session po redirectu lze najít

další zjištění:
ještě raději upřesním, ztratí se přihlášení a jakýkoli namespace Nette.Http.UserStorage, ta ztráta se týká přenosu přihlášeného uživatele, jakýkoli jiný údaj v session se přenese

další zjištění:
zatím jsem zjistil, že je to tím, že se nepřenáší objekt Identity, jiné objekty se mi v holé session přenáší

i dokonce v jiné section session se Identity přenáší

<?php

 XXX => array(1) {
            test => Nette\Security\Identity(4) {
               id private => 1
               roles private => array(0)
               data private => array(0)
               frozen private => FALSE
            }
         }

?>

to vypadá, že se sessionhandlerem problém není, takže problém bude opravdu někde u usera

další změna:
už mne nenapadá co otestovat, vyřadil jsem všechny části v userstorage, které mažou identity a nic nepomohlo

<?php

		/*if (!$section->identity instanceof IIdentity || !is_bool($section->authenticated)) {
			$section->remove();
		}*/

		/*if ($section->authenticated && $section->expireBrowser && !$section->browserCheck) { // check if browser was closed?
			$section->reason = self::BROWSER_CLOSED;
			$section->authenticated = FALSE;
			if ($section->expireIdentity) {
				unset($section->identity);
			}
		}*/

		/*if ($section->authenticated && $section->expireDelta > 0) { // check time expiration
			if ($section->expireTime < time()) {
				$section->reason = self::INACTIVITY;
				$section->authenticated = FALSE;
				if ($section->expireIdentity) {
					unset($section->identity);
				}
			}
			$section->expireTime = time() + $section->expireDelta; // sliding expiration
		}*/

?>

máte nějaký tip co ještě vyzkoušet? expiration je podle mne v pořádku, zdá se, že času má dost

snad ještě nějaké expiration informace doplním:

<?php
aktuální čas:
1327237125


dump($_SESSION);
die;


array(1) {
   __NF => array(5) {
      C => 8
      Time => 1327236531
      B => "jeehh81az6" (10)
      DATA => array(2) {
         "Nette.Http.UserStorage/" => array(7) {
            authenticated => NULL
            identity => NULL
            expireTime => 1327409925
            expireDelta => 172800
            expireIdentity => FALSE
            expireBrowser => FALSE
            browserCheck => TRUE
         }
         "Nette.Http.UserStorage/admin" => array(8) {
            authenticated => TRUE
            reason => NULL
            authTime => 1327237116
            expireTime => 1327409925
            expireDelta => 172800
            expireIdentity => FALSE
            expireBrowser => FALSE
            browserCheck => TRUE
         }
      }
      META => array(2) {
         "Nette.Http.UserStorage/admin" => array(0)
         "Nette.Http.UserStorage/" => NULL
      }
   }
}

?>

je to správně ne?

Editoval mcmatak (22. 1. 2012 14:01)

mcmatak
Člen | 504
+
0
-

vím, kde je problém, ale nevím jak to řešit

problém jsou tyto řádky v session

<?php


if ((!empty($value['B']) && $browserClosed) || (!empty($value['T']) && $now > $value['T']) // whenBrowserIsClosed || Time
|| ($variable !== '' && is_object($nf['DATA'][$section][$variable]) && (isset($value['V']) ? $value['V'] : NULL) // Version
!== Nette\Reflection\ClassType::from($nf['DATA'][$section][$variable])->getAnnotation('serializationVersion'))
						) {

konkrétně $value['V'] = "1.0" (tedy string)
?>

a

<?php
Nette\Reflection\ClassType::from($nf['DATA'][$section][$variable])->getAnnotation('serializationVersion'))
?>

= 1.0 tedy číslo

a výsledek je, že se to sobě nerovná?

je to bug nette? zkoušel jsem to samé napodobit v sandboxu, ale tam se nedostane string do value{V]

Editoval mcmatak (22. 1. 2012 17:53)

David Grudl
Nette Core | 8222
+
0
-

Jak je možné, že to je jednou string a podruhé číslo?