Java týden Java týden
Aprílový black friday tě nenechá v klidu! Až 80 % prémiového obsahu zdarma. Více informací
Pouze tento týden slevy až 80 % na programování v Javě

Diskuze: Změna PHPSESSID

PHP PHP Změna PHPSESSID American English version English version

Aktivity (1)
Avatar
Tomáš Dvořák:19.6.2018 13:37

Ahoj,

stále řeším problém se session. Někdy se stane, že se nějak zvláštně session chová. Při každém reloadu respektive novém načtení se změní session id. Dělá to problém, protože do sessin ukládám to zda je uživatel přihlášen. Uživatel se přihlásí, v session informace je, ale po přesměrování se změní session id a tudíž není uložená informace v session. Po vymazání cookies v prohlížeči se sesion chová standardně a uloží se a session id je stejné. Na hostingu mi věc prověřili a jeví se vše ok. Máte s tím prosím někdo zkušenosti? Kde bych mělo hledat? Děkuji Tomáš

 
Odpovědět 19.6.2018 13:37
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:19.6.2018 14:52

Pravdepodobne mas v kodu prazdne radky pred tim nez volas session start.
Jinak, obcas se pouziva session_regene­rate_id (http://php.net/….session.php)

 
Nahoru Odpovědět 19.6.2018 14:52
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:20.6.2018 7:57

Mozna bych to upresnil.
Zalezi na tom, jak mas nastavene php. Ale default je nastavene tak, ze kdyz ma html kod nebo echo, tak okamzite data posila uzivateli. a nemuze mu to poslat bez hlavicky. Takze, ikdyz nebylo jeste spusteno session_start a je v kodu prazdny radek, mezera nebo html kod, musi k tomu vygenerovat header / prazdne session. Tim padem dostanes jine session id, do ktereho pak zapise data, jmeno uzivatele a tak.
Da se tomu predejit, kdyz das na uplne prvni radek ob_start(); Pak by mel vypnout okamzite posilani.
Nebo si zkontroluj kod a smaz nevalidni data.
Pro rychlejsi hledani je dobre zapnout error_reportin­g(E_ALL). Pokud tam nemas pred prikazy zavinace @ na potlaceni chyb, melo by to pri volani session_start pindat chybu neco jako header is seded. Tak nekde pred tim radkem mas zbytecny kus html kodu nebo echo, print_r, var_dump, proste neco, co vypise html kod. Muze se to nachazet v include. Muze se jednat o znak UTF-8 BOM.

 
Nahoru Odpovědět 20.6.2018 7:57
Avatar
Tomáš Dvořák:20.6.2018 10:14

Ok, vyřeší to, když nastavím auto session_start?

Pokud by tam byla tato chyba, tak by to přeci nefungovalo nikdy, mně jde o to, že to 80x jde v pořádku a 20x se musí na tom počítači vymazat cookies, aby se přiřadilo PHPSESSID jen jedno a neustále se neměnilo.

Chyby mám zapsané a @ nepoužívám. Chyby to žádné nedává. Kde jsem to sledoval, tak session_start() je vždy hned na začátku.

 
Nahoru Odpovědět 20.6.2018 10:14
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:20.6.2018 12:18

Tezko rici. Zkus udelat jednoduchy priklad a ukazat jeho kod. Takhle se tu bavime o jakesi fiktivni veci. Muze tam byt cokoliv. Zkus tam do kodu zabudovat to session_regene­rate_id, viz priklady v dokumentaci php.net, jestli to pomuze.

Ono se da potlacit ty chyby se session. Proto jsem zminil error_reportin­g(E_ALL). Pripadne pres htaccess zmenit nastaveni php, pokud server povoluje htaccess. Nebo pres ini_php() nebo potom primo v php.ini.

Spis ale hadam nejaky ten znak, echo a pod. Mozna to je unikatni stranka, kterou malokdo otevira.
Mozna by slo tam pripsat kod, aby pri zmene session id vypsal tez jmeno souboru/stranky.
Jako, kdyz si smazes cookies, tak prijdes o session. Ty jsou vzajemne propojene.

 
Nahoru Odpovědět 20.6.2018 12:18
Avatar
Tomáš Dvořák:21.6.2018 9:36

Ok, tak tedy, nyní mám problém, aby mi prohlížeč udržel stejné sessionid po reloadu stránky.

Vytvořil jsem soubor kde je jen toto:

<?php
session_start();
echo session_id();

Na jednom prohlížeči (FF), po vypnutí PC a znovu nastartování mi to po každém refresh dává jinou hodnotu.
Na chrome mi to dá jen jednu a je to v pořádku. Pokud na FF vymažu cookies, tak je to v pořádku a zachytí se jen jedna. Session_regene­rate_id nepomohla a chyby to žádné nepíše.

Nějak nechápu, proč mu vadí nějaká hondota v cookies v prohlížeči a není schopen to udržet.

 
Nahoru Odpovědět 21.6.2018 9:36
Avatar
Odpovídá na Tomáš Dvořák
Tomáš Dvořák:21.6.2018 9:51

Tak ještě jeden poznatek. Problém to způsobuje na subdoméně tedy na x.y.cz pokud jsem vymazal všechny cookies z y.cz, tak se session id nemění.

Nakopne mě prosím někdo správným směrem?

 
Nahoru Odpovědět 21.6.2018 9:51
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Tomáš Dvořák
Daniel Vítek:21.6.2018 10:11

Zkus nastavit session_name na subdoméně na jiné a dej vědět jestli to bude pořád dělat.

Nahoru Odpovědět 21.6.2018 10:11
Na síti působím už pěknou řádku let. Pokud budeš něco potřebovat, písni mi, pokusím se ti poradit :)
Avatar
Tomáš Dvořák:21.6.2018 14:15

Teď se mi to stalo i na doméně y.cz. Vytvořilo se cookies na doménu .y.cz, ostatní cookies jsou na server x.y.cz nebo na server www.y.cz.

Co s tím?

 
Nahoru Odpovědět 21.6.2018 14:15
Avatar
Tomáš Dvořák:26.6.2018 8:36

Tak zatím to vypadá, že by měla pomoci tato věc:

ini_set('session.cookie_domain', '.y.cz' );
 
Nahoru Odpovědět 26.6.2018 8:36
Avatar
Odpovídá na Tomáš Dvořák
Tomáš Dvořák:28.11.2018 11:19

Otevírám téma znovu.

Zjistil jsem, že subodmény např. sub.domain.cz má PHPSESSID xxxx, sub2.domain.cz má PHPSESSID yyyy, ale pokud si dám vypsat echo session_id(), tak mi to vypíše hodnotu zzzzz. hodnota zzzzz je PHPSESSID u domény ".domain.cz".

Jak je možné, že jak na sub.domain.cz i na sub2.domain.cz i na .domain.cz se používá stejné PHPSESSID zzzzz.

Nepomohlo ani nastavené na sub.domain.cz - ini_set('sessi­on.cookie_doma­in', 'sub.domain.cz' );

Nikde nastavení ini_set('sessi­on.cookie_doma­in', '.domain.cz' ); nepoužívám. Jak je tedy možné, že sub.domain.cz i sub2.domain.cz přebírají PHPSESSID z .domain.cz.

www.domain.cz má také jiné PHPSESSID mmmm a také používá PHPSESSID z .domain.cz

Co s tím?

 
Nahoru Odpovědět 28.11.2018 11:19
Avatar
Odpovídá na Tomáš Dvořák
Tomáš Dvořák:28.11.2018 11:39

Spíš mě zajímá kde se vezme PHPSESSID pro .domain.cz (tečka domain.cz)? Pokud toto odstraním z cache prohlížeče, tak vše jede v pořádku.

 
Nahoru Odpovědět 28.11.2018 11:39
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.