Nevytváří se cookies, takže po přesměrování se změní SESSION ID a jsem bez uživatele

v_wagner
Člen | 10
+
0
-

Mám celkem 3 místa kde mám prostředí pro běh aplikací a již 5. aplikaci založenou na NETTE, která je založena vždy na stejném základu (věci kolem přihlašování atd jsou shodné).

Na localhostu vše jede, přihlašování, session, cookies se vytvářejí, při přesměrování na jinou stránku zůstane uživatel přihlášený.

Na intranetovém serveru kde je místo apache použit nginx jede kterákoliv tato aplikace, cookies i session drží a vše funguje.

Na novém serveru, který je vystrčený ven bez použití domény (přes IP adresu brány s uvedením portu) se aplikace rozjede, tváří se funkčně, ale při přesměrování se změní SESSION ID, následkem čehož na stránce kam je přesměrováno úspěšné přihlášení je session prázdná, login prázdný a COOKIES se nevytvoří. Zkusil jsem zrušit přesměrování po loginu, takže session zůstala naplněná, ale cookies neexistuje ani jedna (tedy ani PHPSESSID). Bez přesměrování vypadá obsah session v laděnce nejspíš dobře:

Array (1)
„Nette.Http.UserStorage/“ ⇒ array (9)
authenticated ⇒ TRUE
expireTime ⇒ „1513223735“
expireDelta ⇒ 7200
expireIdentity ⇒ FALSE
expireBrowser ⇒ TRUE
browserCheck ⇒ TRUE
identity ⇒ Nette\Security\Identity #01
id private ⇒ 2
roles private ⇒ array (1)
0 ⇒ 9

Kontroloval jsem veškerá nastavení PHP kolem session a porovnával s druhým serverem a je to ve shodě na byte. Experimentoval jsem celý den s různými variantami nastavení, ale nic. Tuším, že bude nějaká zrada v nastavení, ale nějak mi dochází nápady kde hledat.

Jinak Nette je 2.3, PHP 5.6.30

Natažné moduly:
core mod_so mod_watchdog http_core mod_log_config mod_logio mod_version mod_unixd mod_access_compat mod_alias mod_auth_basic mod_authn_core mod_authn_file mod_authz_core mod_authz_host mod_authz_user mod_autoindex mod_deflate mod_dir mod_env mod_filter mod_headers mod_mime prefork mod_negotiation mod_php5 mod_reqtimeout mod_rewrite mod_session mod_session_cookie mod_session_crypto mod_session_dbd mod_setenvif mod_socache_shmcb mod_ssl mod_status

v_wagner
Člen | 10
+
0
-

Doplním další z jištěné:

Když se podívám po přihlášení před přesměrováním na HTTP Request, $_COOKIE a HTTP Response, tak tam kde to jede jsou všude cookies.
Tam kde to po přesměrování o cookies přijde je v HTTP Response

Set-Cookie: nette-browser=3if3ytqd7z; path=/; httponly
Set-Cookie: CarShareNH=pk14njq10osmh6g535a910jt94; expires=Thu, 28-Dec-2017 07:10:39 GMT; Max-Age=1209600; path=/; HttpOnly

Ale aniž by se přesměrovalo, tak je tam uplně přázdné $_COOKIE a HTTP Request vůbec neobsahuje položku Cookie

Pak jsem zkusil zakomentovat ve zdrojáku nette v src\Http\UserStorage.php řádek kde je $this->sessionHandler->regenerateId(); a začne to fungovat.

Jenže to podle mě nemůže být řešení pro něco co visí ven. Pořád si myslím, že je někde něco špatně nastaveno a nejsem schopen přijít na to co.

v_wagner
Člen | 10
+
0
-

Tak bohužel – po zapnutí přesměrování po loginu na konkrétní stránku, nebo výběru stránky z menu se to ztratí stejně a jsem kde jsem byl.

v_wagner
Člen | 10
+
0
-

Vyzkoušel jsem i nějaké další rady tady z fóra – dohleůdat jestli někde nemám BOM (našel jsem a odstranil), jestli někde nemám na konci php zdrojáku ?> a taky jsem našel, prohnal jsem to code-checkerem a kromě ěnjakých whitespace a space místo tabelátorů už to nic nenachází a situace je pořád stejná – dokud se nepřesměruju na jinou stránku, nebo se na ní nepřepnu linkem, tak jsem přihlášen, mám zjevně cookie i session, jak někam vlezu, switchne se session a je po cookies.

v_wagner
Člen | 10
+
0
-

Udělal jsem zoufalý pokus a postahoval jsem vše v posledních verzích (myslím tím nette a další moduly). Sice mi na localhostu z důvodu kompatibility nešel zobrazit grid, ale chtěl jsem vědět, jestli to není v nette a není – po spuštění na serveru se to chová stejně – po pokusu o přechod na jinou stránku jsem bez uživatele.

v_wagner
Člen | 10
+
0
-

Jediné čeho jsem byl schopen dosáhnout je, že když nastavím

session:
autoStart: yes

namísto smart, tak nová session po přechodu na jinou stránku není po stránce obsahu null, ale má 1 položku a to Authenticated ⇒ false

iguana007
Člen | 970
+
0
-

Co nastaveni casu na serveru, to si kontroloval?

v_wagner
Člen | 10
+
0
-

Nastavení času ? Je nejspíš v jiné časové zóně (o 1 hodinu napřed).

iguana007
Člen | 970
+
0
-

Slo mi o to, co ti vrati server, kdyz v shellu zadas prikaz: date

v_wagner
Člen | 10
+
0
-

Vrací aktuální datum a čas posunutý o cca 1 hodinu. Srovnal jsem ho, ale jen aby byl uplně na chlup stejný.

Thu Dec 14 15:10:35 CET 2017

iguana007
Člen | 970
+
0
-

Tezko rict co by to mohlo byt, nemuzes nekam nahodit phpinfo()?

v_wagner
Člen | 10
+
0
-

Nechal jsem si nakonec nahodit nový čistý virtuál, protože tento byl/je původně určený pro jiný projekt, kde se kolega kdysi pokoušel nastavit nějaké věci kolem bezpečnosti od SSL až po já nevím co všechno, původně to jelo pod https, pak se to zase očesalo a zjevně je tam něco, co zůstalo nastaveno a nette vadí a nepodařilo se najít co.

Na nový virtuál jsem nahodil appache, php, nějaké moduly, postgres, pár základních konfigurací, založil čistou DB, překopíroval adresář s projektem, nastavil práva, konexi na novou db a světe div se – po 3 dnech praní se s původním serverem to tady za hodinku naběhlo a chová se to správně.

Jan Endel
Člen | 1016
+
0
-

Pravděpodobně to bylo Strict secure cookie ⇒ ty které nebyly přeneseny přes https se zahodí – víc čtení tady: https://www.chromestatus.com/…322921848832

v_wagner
Člen | 10
+
0
-

Jestli myslíš session.cookie_secure a session.use_strict_mode, tak jsou oba off a vůbec celá sekce session v phpinfu je na obou strojích uplně stejná (na byte). Přitom na jednom to chodí a na druhém ne. S naprosto stejným zdrojákem aplikace včetně .htaccess souborů (jediná změna při přesunu na nový stroj byla že jsem v configu změnil adresu a heslo sql serveru).