Autor Zpráva
Pat
Profil *
Ahoj,
při psaní aplikace jsem chtěl využít mechanismus sessions. Mám nastaveno automatické spouštění session (abych nemusel všude spouštět session_start ()) - jedná se o několik skriptů - něco jako nastavení jazyka, přihlášení uživatele, ... . Bohužel při nastavování a čtení proměnných v $_SESSION nevidím všechny. Zajímavý je výpis $GLOBALS (viz níže), což se zdá že je důvod. Proč se uvnitř funkce $_SESSION používá jako lokální pole, když se podle všech manuálů jedná o "superglobální" pole? Z logu je patrné, že session_id je stále stejné.

Výpis $GLOBALS:

[0] => Array
(
[GLOBALS] => Array
*RECURSION*
[_POST] => Array
(
[thisLoginField] => pat
[thisPasswordField] => xxx
[submitEnterUserForm] => přihlaš
)

[_GET] => Array
(
)

[_COOKIE] => Array
(
[PHPSESSID] => 84cc30eb12e069923ae0a3629b871139
)

[_FILES] => Array
(
)

[_SESSION] => Array
(
[firstname] => pat
[login] => pat
[lastname] => vloženýtext
)

[_REQUEST] => Array
(
[thisLoginField] => pat
[thisPasswordField] => xxx
[submitEnterUserForm] => přihlaš
[PHPSESSID] => 84cc30eb12e069923ae0a3629b871139
)

[logfile] => c: empsprt.log
[_SESSI0N] => Array
(
[actionoutput] => OK
[language] => cs
)

[link] => Resource id #11
[thisLogin] => pat
[thisPassword] => xxx
[sql] => SELECT * FROM user WHERE login = 'pat'
[result] => Resource id #18
[numberOfRows] => 1
)

[1] => Array
(
[thisLoginField] => pat
[thisPasswordField] => xxx
[submitEnterUserForm] => přihlaš
)

[2] => Array
(
)

[3] => Array
(
[PHPSESSID] => 84cc30eb12e069923ae0a3629b871139
)

[4] => Array
(
)

[5] => Array
(
[firstname] => pat
[login] => pat
[lastname] => vloženýtext
)

[6] => Array
(
[thisLoginField] => pat
[thisPasswordField] => xxx
[submitEnterUserForm] => přihlaš
[PHPSESSID] => 84cc30eb12e069923ae0a3629b871139
)

[7] => c: empsprt.log
[8] => Array
(
[actionoutput] => OK
[language] => cs
)

[9] => Resource id #11
[10] => pat
[11] => xxx
[12] => SELECT * FROM user WHERE login = 'pat'
[13] => Resource id #18
[14] => 1
)

Díky za pomoc...
Jan Tvrdík
Profil
IMHO je to následek právě session_autostart. Z ňákého důvodu nedojde k zavedení session (headers already sent...) a tak při volání se vytvoří nové lokální pole. Zkus zkontrolovat posílání hlaviček, vypnout session autostart a spouštět je manuálně a zkontrolovat, jestli se to povedlo.
Pat
Profil *
Díky za odezvu. Abych doplnil: session_autostart jsem původně měl vypnuté, session_start jsem pouštěl na začátku každého skriptu, bylo to totéž. Chybové hlášení o již zaslaných hlavičkám nebylo vidět ani v browseru ani v logu apache. Posílání hlaviček ještě prověřím (kdybys náhodou měl nějaký odkaz, kde se dočtu víc, bylo by to super). BTW je to stejné u verze 5.1.4 i 5.2.1. Dokonce - asi je to blbost - jsem v každém skriptu zkoušel volat global $_SESSION, výsledek byl stejný.
Může vadit, že některé skripty jsou jako fce (require_once ...) a některé z webových formulářů?
Pat
Profil *
Ahoj,
tak dovolte, abych se omluvil všem, kdo tímto problémem "pálili" čas, modří už vědí: $_SESSION je někde psáno s písmenem O, ale povedlo se mi udělat překlep a v některých instancích se místo písmena obsahuje číslo 0.
Zdravím
Jan Tvrdík
Profil
Lol, tak to sem vážně něčekal :-P
Toto téma je uzamčeno. Odpověď nelze zaslat.