Fórum Root.cz

Hlavní témata => Server => Téma založeno: cosmo 18. 01. 2014, 10:49:48

Název: Různé prohlížeče mají stejné php sessionID
Přispěvatel: cosmo 18. 01. 2014, 10:49:48
Zdravim Vas,

riesim pomerne zaujimavy problem s apache/php na LAMP a XAMPP.

Ladim mensiu aplikaciu v PHP a pri prihlasovani pouzivam iba bezne session zalezitosti (cookies su zatial zakomentovane).
Ked sa prihlasim z jedneho browsera (napr. chrome) tak mi vytvori sessionid, vytvori aj subor pre session v default ceste pre sessions v Xampp. Som normalne prihlaseny - nastavene su $_SESSION premenne,etc...
Ked si spustim druhy browser (FF), vidim sa tam prihlaseny uplne automaticky. Vobec sa pri pokuse o prihlasenie nevytvori novy session subor. Dokonca ked sa odhlasim z FF tak som automaticky odhlaseny aj v Chrome. Stale je pouzity rovnaky session subor s rovnakou session ID.
Toto sa deje nezavisle na serveri, blbne to na windows localhoste aj na debiane. Kod na prihlasovanie je strasne spraseny a neuveritelne neprehladny (nie je moj) ale vsetky moznosti, kde by sa toto mohlo diat som skontroloval a zakomentoval vsetko nepotrebne.

php.ini som skusil aj default aj rozne upravy session sekcie, dokonca aj session handler pre php cez mysql - ziadny vysledok.
Aj v tomto pripade sa stale pouzije rovnake session ID pre rozne browsery a navzajom sa prepisuje.

Dokonca aj cisty kod, kde len vlozim do sessions nejake data, tak tieto session su pristupne z kazdeho browsera. akoby server vzdy pouzival rovnaku session ID bez ohladu na zdroj requestu.
Skratka, cokolvek ulozim do $_SESSION tak je dostupne vzdy pre kazdy browser.

Stretli ste sa niekto s niecim podobnym ? Cez google som toho nasiel mnoho, ale prakticky nic nepomohlo. Moze byt za tym nejake menej bezne nastavenie php.ini ? Stale podozrievam zdrojak, mozno sa niekto z vas s takymto problemom uz stretol a vie poradit.

Vopred dakujem za kazdu radu.
Název: Re:php sessionID su rovnake z rozdielnych browserov
Přispěvatel: fish 18. 01. 2014, 11:07:10
Posli, prosimte, verzi Apache a hlavne PHP. Kdyz si otevres v chrome a FF ladeni (F12) a kouknes do network, tak jsou sessions skutecne identicke? docela nechapu jak by si je mezi sebou vymenili :)
Název: Re:php sessionID su rovnake z rozdielnych browserov
Přispěvatel: Bla 18. 01. 2014, 11:17:04
Jako první by si měl pustit test, jestli session už existuje a checknout si, jestli stored session náhodou neprdne znovu na klienta. Obojí je samo chyba v kódu.
Název: Re:php sessionID su rovnake z rozdielnych browserov
Přispěvatel: Peterman 18. 01. 2014, 11:23:12
Popsané chování by mohlo ukazovat na špatně generované session_id,
zkuste v kódu hledat volání funkce session_id() ... pokud má parametr, vystopujte jak je generován

Viz http:// php.net/session_id (http:// php.net/session_id):

    string session_id ([ string $id ] )

    id
        If id is specified, it will replace the current session id. session_id() needs to be called before session_start() for that purpose.
Název: Re:php sessionID su rovnake z rozdielnych browserov
Přispěvatel: cosmo 18. 01. 2014, 11:31:36
Vdaka za odpoved.

Apache/php:  Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7

Je to lokalny Xampp.

sessionID v chrome = a2e2c2d529c190de0f456e47a0a3f128
sessionID vo FF =l8ch0hkt28939uui12o2glnav5

Teraz su rozdielne, ale ked vlozim v skripte (test222.php) $_SESSION['test'] = "chrome" a spustim skript v chrome tak sa ulozi do session.
Nasledne v skripte zakomentujem //$_SESSION['test'] = "chrome" a necham iba var_dump($_SESSION) tak vo FF vidim to, co som vlozil do $_SESSION['test'] pod chrome. Samozrejme aj opacne. Stale sa modifikuje iba jeden session subor pre session id a2e2c2d529c190de0f456e47a0a3f128.

Nove session subory vziknu iba ak zavolam iny skript napr test333.php. Ak v tomto skripte cokolvek ulozim, tak je to opat dostupne v kazdom browsery ale fyzicky ulozene v inom session subore na serveri.

Neviem, preco su teraz rozdielne session ID, predtym, ked som si dal echo session_id() tak to stale ukazovalo rovnaku session.

Uz tomu nerozumiem uplne :-( ako mozem pri rozdielnych session ID vidiet rovnaky obsah v session.

Takto vyzera skript:

Kód: [Vybrat]
<?php

session_start
();

$_SESSION['test'] = "blabla";

var_dump($_SESSION['test'] );


Vdaka za dalsie odpovede, idem to skontrolovat.
Název: Re:php sessionID su rovnake z rozdielnych browserov
Přispěvatel: cosmo 18. 01. 2014, 12:56:46
to PETERMAN:

vdaka za tip, ale session_id(); nevolam rucne. Vzdy ked dam zdebugovat script cez phpdebugger, tak to vrati rovnake sessionID.
Debugujem v chrome a aj vo FF. Presiel som debuggerom celu cast php kodu, ktorej sa to tyka.
Session ID je uplne rovnake v pripade FF aj Chrome, taktiez v cookies. Oba browsery maju vymazanu cache, cookies, proste vsetko.
XAMPP je restartnuty.

Uz pri prvej navsteve cez debugger mi vzdy vygeneruje rovnake sessionID. Proste vyzera to tak, ako keby server tvrdohlavo generoval a pouzival stale rovnaku session.

to BLA:

presne to robim, cez debugger (v podstate xdebug ale original pre phped) vidim session_id. Vzdy je proste rovnaka bez ohladu na browser. Skratka moj skript pri zavolani session_id() dostane vzdy rovnake cislo v ktoromkolvek debuggeri v kazdom browseri.
Alebo mas na mysli nejaky iny typ debugovania ?

v storage mi vygeneruje aj par inych sessionID suborov, tie su vsak uplne prazdne. To ze je pouzity prave kontkreny session subor vidim aj tak, ze ked reloadnem stranku, subor je zamknuty a nemozem ho citat.

Uz mi naozaj dosli vsetky rozumne moznosti :-(
Název: Re:php sessionID su rovnake z rozdielnych browserov
Přispěvatel: cosmo 18. 01. 2014, 14:34:50
Tak, zahada sa nakoniec vyriesila.

Problem bol v kode ale nie priamo v PHP. Kod pouziva mnoho incude() a sice som kazdy skontroloval, ale jeden volal smarty template.
V jednom z TPL suborov bolo toto:

Kód: [Vybrat]
(function()
{var data = ["PHPSESSID=a2e2c2d529c190de0f456e47a0a3f128; path=/"];for (var i = 0; i < data.length; i++) {document.cookie = data[i];}})()

Preco niekto kodi taketo prasaciny a zrovna v tpl subore a prave takto ? Javacript nemam na starosti a neskumal som, co to dalej robi, ale po zakomentovani je to uz konecne o.k. Nech si to riesi ten, co robil TPL subory...

Nech som robil cokolvek, tak session cookie bola vzdy "hardcoded" a to nezavisle od php kodu alebo direktiv php.ini.

Nuz, som o skusenost bohatsi a nabuduce budem vediet, ze ked sa deje nieco divne so session/cookies, tak treba poriadne prehladat aj javascripty :D

Dakujem vsetkym diskutujucim za ich odpovede a zelam prijemny vikend  :)