Problém se session při přesunu webu z Linuxu na Windows

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

Zdravím,

objevily se mi potíže se session při přesunu jednoho staršího webu, který běží na Nette verze 2.0. Potřebuji přesunout tento web z Linuxového serveru na Windows server. Vše jsem si tam nastavil a Nette Checkerem jsem si zkontroloval nastavení. Vše je nastaveno v pořádku. Bohužel je ale problém se session. Když se zkouším na webu přihlásit, tak přihlášení proběhne v pořádku, identita se uloží do sessiony, ale po přesměrování je prázdná. Kontroloval jsem cookies a je v ní správně uložené ID. Nenapadá vás někoho důvod, proč to tohle dělá? Je někde problém v nastavení?

Díky za pomoc

Tomáš Votruba
Moderator | 1114
+
0
-

Ahoj, Windows sice nepoužívám, ale napadají mě práva k temp adresáři nebo adresáři kde jsou uložené sessions.

GEpic
Člen | 566
+
0
-

A nebo problém se zpětnými lomítky v cestách?

serten
Člen | 55
+
0
-

@TomášVotruba a @GEpic Tak situace se trochu změnila. V těchto věcech bohužel chyba není. Zkusil jsem na stejném serveru jinou Nette aplikaci, akorát pod jinou verzí PHP. Běží to na Nette 2.4 a PHP 5.6.2. Ta nefungující běží na PHP 5.4.9. Když pořádně procházím proces přihlášení, tak ona vlastně session existuje. Ale identita je prázdná. Ještě před přesměrováním je v session uložená a jsou tam správná data. Jakmile se ale provede přesměrování, tak identita je prázdná a authenticated je na NULL. Napadá vás důvod?

Editoval serten (3. 7. 2016 22:22)

GEpic
Člen | 566
+
0
-

serten napsal(a):

@TomášVotruba a @GEpic Tak situace se trochu změnila. V těchto věcech bohužel chyba není. Zkusil jsem na stejném serveru jinou Nette aplikaci, akorát pod jinou verzí PHP. Běží to na Nette 2.4 a PHP 5.6.2. Ta nefungující běží na PHP 5.4.9. Když pořádně procházím proces přihlášení, tak ona vlastně session existuje. Ale identita je prázdná. Ještě před přesměrováním je v session uložená a jsou tam správná data. Jakmile se ale provede přesměrování, tak identita je prázdná a authenticated je na NULL. Napadá vás důvod?

A ty používáš to IIS? Nedávno si tu tento problém se session již na fóru zmiňoval.
Zkoušel si třeba WAMP? Sám vyvíjím na widlích a stačilo wamp nainstalovat, a vše fungovalo as expected.

Editoval GEpic (3. 7. 2016 22:29)

serten
Člen | 55
+
0
-

Ano, běží to na IIS. Popravdě začal jsem přemýšlet o instalaci XAMPPu díky těmhle všem problémům. Ale potřebuju kvůli dvěma verzím Nette mít taky dvě verze PHP. Nebo je možné na novější verzi PHP rozběhat i starší verzi Nette? Celkem dost se bojím té zpětné kompatibility.
Jinak obě verze PHP jsou nastaveny stejně. Každá má svůj vlastní adresář pro session, takže k náhodnému přepisování by nemělo dojít. Ale proč se teda identita v UserStorage neuchová?

GEpic
Člen | 566
+
0
-

serten napsal(a):

Ano, běží to na IIS. Popravdě začal jsem přemýšlet o instalaci XAMPPu díky těmhle všem problémům. Ale potřebuju kvůli dvěma verzím Nette mít taky dvě verze PHP. Nebo je možné na novější verzi PHP rozběhat i starší verzi Nette? Celkem dost se bojím té zpětné kompatibility.
Jinak obě verze PHP jsou nastaveny stejně. Každá má svůj vlastní adresář pro session, takže k náhodnému přepisování by nemělo dojít. Ale proč se teda identita v UserStorage neuchová?

Mám na Savaně PHP 5.6 a běží mi Nette jak 2.3 tak 2.4. Starší verze Nette bohužel netuším. Každopádně jedná se o projekty využívající mnoho funkcí napříč frameworkem a zatím na žádném z projektů problém nebyl. Každopádně pokud ti to běželo na PHP 5.4, jako mě Savana do nedávna, neměl by být problém.

Editoval GEpic (3. 7. 2016 23:11)

serten
Člen | 55
+
0
-

Tak ani nasazení XAMPPu nepomohlo :-( Pořád přetrvává stejný problém. Identita se ztrácí a mě se nedaří přihlásit.

CZechBoY
Člen | 3608
+
0
-

No na xamppu mi web normálně jede.. Můžeš poslat nějakej kod co ti to dělá?

serten
Člen | 55
+
0
-

@CZechBoY No je právě sranda, že mi to nevyhazuje žádnou chybu. Tady je postup a kroky, kterými jsem to testoval, ale k ničemu kloudnému jsem se nedostal:

Přihlášení je jednoduché a má tento kód:

	public function signInFormSubmitted($form)
	{
		$this->template->loginForm = $form;

		$values = $form->getValues();

		$this->getUser()->setExpiration('+ 14 days', FALSE);

		try {
			$this->getUser()->login($values->username, $values->password);
		} catch (Nette\Security\AuthenticationException $e) {
			$form->addError($e->getMessage());
			return;
		}

		$this->redirect('Order:');
	}

V try větvi jsem si ihned po loginu nechal vydumpovat identity uživatele a je tam následující obsah:

Nette\Security\Identity(4) {
   id private => 19
   roles private => array(1) [
      0 => "admin" (5)
   ]
   data private => array(10) {
      id => 19
      role_id => "admin" (5)
      username => "jano" (4)
      name => "jano" (4)
      lastname => ""
      email => "some@email.cz" (21)
      created => Nette\DateTime(3) {
         date => "-0001-11-30 00:00:00" (20)
         timezone_type => 3
         timezone => "Europe/Prague" (13)
      }
      updated => Nette\DateTime(3) {
         date => "2016-03-15 22:40:31" (19)
         timezone_type => 3
         timezone => "Europe/Prague" (13)
      }
      deleted => "0"
      role => array(2) {
         id => "admin" (5)
         name => "Administrator" (13)
      }
   }
   frozen private => FALSE
}

Když to ale nechám přesměrovat dál a provedu dump po přesměrování hned v BasePresenteru v startup metodě, tak identita je NULL a UserStorage má tenhle obsah:

Nette\Http\UserStorage(3) {
   namespace private => ""
   sessionHandler private => Nette\Http\Session(4) {
      regenerated private => NULL
      options private => array(14) {
         gc_maxlifetime => 1209600
         cookie_lifetime => 1209600
         referer_check => ""
         use_cookies => 1
         use_only_cookies => 1
         use_trans_sid => 0
         cookie_path => "/"
         cookie_domain => ""
         cookie_secure => FALSE
         cookie_httponly => TRUE
         cache_limiter => NULL
         cache_expire => NULL
         hash_function => NULL
         hash_bits_per_character => NULL
      }
      request private => Nette\Http\Request(9) {
         method private => "GET" (3)
         url private => Nette\Http\UrlScript(10) { ... }
         query private => array(0)
         post private => array(0)
         files private => array(0)
         cookies private => array(2) { ... }
         headers private => array(13) { ... }
         remoteAddress private => "127.0.0.1" (9)
         remoteHost private => "127.0.0.1" (9)
      }
      response private => Nette\Http\Response(5) {
         cookieDomain => ""
         cookiePath => "/"
         cookieSecure => FALSE
         cookieHttpOnly => TRUE
         code private => 200
      }
   }
   sessionSection private => Nette\Http\SessionSection(5) {
      session private => Nette\Http\Session(4) {
         regenerated private => NULL
         options private => array(14) { ... }
         request private => Nette\Http\Request(9) { ... }
         response private => Nette\Http\Response(5) { ... }
      }
      name private => "Nette.Http.UserStorage/" (23)
      data private => array(1) {
         authenticated => NULL
      }
      meta private => NULL
      warnOnUndefined => FALSE
   }
}

Z tohoto důvodu není uživatel přihlášený a hodí mě to zpět na přihlašovací stránku. Budou stačit tyhle informace nebo potřebujete nějaké další info? Konkrétně se jedná o Nete 2.0.6.

Editoval serten (4. 7. 2016 20:30)

CZechBoY
Člen | 3608
+
0
-

Celkem stará verze.
No a ta session před přesměrováním se odešle? Je stejný session id? Jakej je obsah session před tim přesměrováním?

serten
Člen | 55
+
0
-

Ten projekt už má taky pár let. Jen ho dočasně bohužel musím přesunout, aby se dal ještě spravovat a používat před dokončením nové verze.
Před odesláním je obsah SESSION[„__NF“] následující:

array(5) {
   C => 16
   Time => 1467658285
   B => "qzorckxumo" (10)
   DATA => array(1) {
      "Nette.Http.UserStorage/" => array(9) {
         authenticated => TRUE
         expireTime => "1468867980" (10)
         expireDelta => 1209600
         expireIdentity => FALSE
         expireBrowser => FALSE
         browserCheck => TRUE
         identity => Nette\Security\Identity(4) { ... }
         reason => NULL
         authTime => 1467658380
      }
   }
   META => array(1) {
      "Nette.Http.UserStorage/" => array(3) {
         browserCheck => array(2) { ... }
         foo => array(2) { ... }
         identity => array(1) { ... }
      }
   }
}

Session ID je trcsb7urko8r2hmm0dps7q4a46.

Po přesměrování je SESSION[„__NF“]:

array(5) {
   C => 18
   Time => 1467658285
   B => "qzorckxumo" (10)
   DATA => array(1) {
      "Nette.Http.UserStorage/" => array(1) {
         authenticated => NULL
      }
   }
   META => array(1) {
      "Nette.Http.UserStorage/" => NULL
   }
}

A až teď si všímám že Session ID se změnilo na 1msid0eq8r2adeqkul6tg70050. Tohohle jsem si před tím nevšiml. Při tom jsem pořád na stejném webu. Z website.local přecházím na website.local/order/

Chápu, že tohle je teda ten problém chybějící identity, ale proč se to session ID mění?

serten
Člen | 55
+
0
-

@CZechBoY Sorry že tak otravuju, ale nenapadá tě něco?

serten
Člen | 55
+
+2
-

Tak vyřešeno, bohužel chyba byla v kusu kódu hned na začátku v indexu, který jsem přehlédl :-( Ten byl na míru šitý pro daný operační systém. Díky přesunu mi to potom při každém novém načtení stránky přepisovalo session a taky session id. Příště je hold potřeba se víc dívat :-( Jinak díky za pomoc a rady @CZechBoY@GEpic