Zdravím,
mám stránku a do té stránky dám objekt do session a pak použiju header pro přesměrování na jinou stránku. Jenže na té druhé stránce je ten objekt prázdný.
Na jedné stránce je:
$uz=$uz->DejPodleNicku($_POST["nick"]);
$_SESSION["uzivatel"]=$uz;
header("location: index.php");
Na indexu je jen ověření, jestli session existuje. Když si před tím nechám vypsat obsah session, dostanu:
Array ( [uzivatel] => )
Když to udělám takto:
$uz=$uz->DejPodleNicku($_POST["nick"]);
$_SESSION["uzivatel"]=$uz;
print_r($_SESSION["uzivatel"]);
vypíše se mi celý vyplněný objekt.
Nenapadá někoho, v čem je problém?
Na všech stránkách, kde chcete použít session, musíte předtím zavolat funkci session_start(), jinak se do $_SESSION nenačte uložený obsah. Bez toho zavolání působí $_SESSION jako obyčejná proměnna.
session_start() je na každé stránce po require_once všech souboru s třídami, které se používají.
Kdyby to nebylo php, tak vidím problém v typování...
Když se kód změní na:
$helpful=$uz->DejPodleNicku($_POST["nick"]);
$_SESSION["uzivatel"]=$helpful;
co vyplivne print_r($_SESSION); na další stránce?
Druhou možnou chybu vidím ve gunkce DejPodleNicku, která může vracet žádnou hodnotu.
DejPodleNicku určitě vrací hodnotu.
Zkoušel jsem ještě $_SESSION["uzivatel"]=5; a na další stránce zůstalo pouze Array([uzivatel]=>). Zkoušel jsem ještě, když tu session smažu, tak z toho výjde Array(). Takže tam spíš bude problém se serializací.
Zkuste kdyžtak ještě změnit index "uzivatel" za jiný. Třeba dochází ke konfliktu. Kdyby to nepomohlo, tak zkuste otestovat funkčnost session na jednoduchém kódu.
Na doméně kvalitne.cz (alespoň na mé subdoméně) je register_globals on. Chyba/problem tedy může být skoro kdekoliv v kodu, pokud se pouziva promenna $uzivatel.
Druhý teoreticky možným (pokud je chyba v názvu session) řešením je register_globals pres .htaccess vypnout.
To je snad zlý sen: register_globals je implicitně zapnuté? Proč?
Kit: Mě se ptej. Zkontrolovat si, že nekecám klidně můžeš.. http://dreamer.kvalitne.cz/info.php
Mám pocit, že mě omejou: Na všech svých webech na WZ mám register_globals také zapnuté. Ještěže každou proměnnou poctivě inicializuji.
Kit: To bys měl za ty roky už vědět, jak to chodí na WZ. Pokud to funguje, tak není co měnit ;) Zapnuté register_globals je tu od samého začátku a když věci funguji, tak proč by se to mělo vypínat. Navíc hádám, že by se tu strhla vlna nadávak "proč to k.. nejde? Co jste to zas po..".
Kdyby register_globals vypnuli při přechodu na PHP5, tak by to nemuselo být zas tak bolestivé. Alespoň by se odstavily špatně napsané skripty. Ale chápu, že někteří uživatelé by zuřili, kdyby do svých skriptů museli dopsat 2-4 řádky navíc.
Osobně bych ty, co zuří, nechal přečíst si manuál, který říká "This feature has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.".