Po redirectu z loginu nette zahodí identity ze session
- mcmatak
- Člen | 504
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
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)