Nevytváří se cookies, takže po přesměrování se změní SESSION ID a jsem bez uživatele
- v_wagner
- Člen | 10
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
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
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
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
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
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
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).