Chci geek triko! Chci geek triko!
Extra 10 % bodů navíc a tričko zdarma při zadání kódu "TRIKO10"

Diskuze: Změna PHPSESSID

PHP PHP Změna PHPSESSID American English version English version

Aktivity (1)
Avatar
Tomáš Dvořák:19. června 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. června 13:37
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:19. června 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. června 14:52
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:20. června 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. června 7:57
Avatar
Tomáš Dvořák:20. června 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. června 10:14
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:20. června 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. června 12:18
Avatar
Tomáš Dvořák:21. června 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. června 9:36
Avatar
Odpovídá na Tomáš Dvořák
Tomáš Dvořák:21. června 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. června 9:51
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Tomáš Dvořák
Daniel Vítek:21. června 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. června 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. června 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. června 14:15
Avatar
Tomáš Dvořák:26. června 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. června 8:36
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 10 zpráv z 10.