Diskuze: Změna PHPSESSID
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Pravdepodobne mas v kodu prazdne radky pred tim nez volas session start.
Jinak, obcas se pouziva session_regenerate_id (http://php.net/….session.php)
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_reporting(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.
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.
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_regenerate_id, viz priklady v dokumentaci php.net, jestli to pomuze.
Ono se da potlacit ty chyby se session. Proto jsem zminil error_reporting(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.
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_regenerate_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.
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?
Zkus nastavit session_name na subdoméně na jiné a dej vědět jestli to bude pořád dělat.
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?
Tak zatím to vypadá, že by měla pomoci tato věc:
ini_set('session.cookie_domain', '.y.cz' );
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('session.cookie_domain', 'sub.domain.cz' );
Nikde nastavení ini_set('session.cookie_domain', '.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?
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.
Zobrazeno 12 zpráv z 12.