IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Problémy se SESSION

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

Aktivity
Avatar

Člen
Avatar
:21.2.2018 15:47

Zdravím,
bez zjevného důvodu mi přestala fungovat webová aplikace, využívající SESSIONs. Nedošlo k žádnému zásahu do kódu či databáze a po mnoha pokusech o debug jsem dal dohromady tento primitivní program, abych zjistil, že SESSION údajně začíná ještě před prvním voláním:

<?php
        session_start();
?>

Kód hází chybu o ignoraci session_start() na 1. řádku (Session has already been started...). Tento kus kódu je ve skriptu index.php a je to jediný soubor v serverové složce. Současně s tímto problémem se mi ani nedaří přenos jakékoliv hodnoty v rámci relace:

<?php
        session_start();
        var_dump($_SESSION);
        $_SESSION['meh'] = 'MEH';
?>

Při druhém (a každém dalším volání) je $_SESSION stále jen prázdné pole. Má někdo nápad, kde hledat brouka?

 
Odpovědět
21.2.2018 15:47
Avatar
Mirek Slouka
Člen
Avatar
Mirek Slouka:21.2.2018 16:19

Co zkusit prvně do session po startu něco přidat a a potom to zkusit vydumpovat?

<?php
        session_start();
        $_SESSION['meh'] = 'MEH';
        var_dump($_SESSION);
?>
Nahoru Odpovědět
21.2.2018 16:19
I can explain it to you, but I can't understand it for you.
Avatar

Člen
Avatar
Odpovídá na Mirek Slouka
:21.2.2018 17:30

To funguje v pohodě, pole $_SESSION je vytvořeno a dá se s ním pracovat, akorát se v něm neuchovávají hodnoty napříč relací, jen napříč jedním skriptem (v rámci něhož se $_SESSION chová standardně, jako superglobální pole. Po skončení běhu skriptu končí životnost uložených hodnot. Původně jsem myslel, jestli v tom nemá prsty nevhodně sestavený redirect, ale když jsem program kompletně osekal na výše uvedený, nevím si s tím rady.

Jinak testuji v Opeře a Firefoxu, v obou jsou povoleny COOKIES, ostatně jiné aplikace mi z lokálního serveru běží v pohodě (včetně té samé, která má problém na vzdáleném serveru).

 
Nahoru Odpovědět
21.2.2018 17:30
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:21.2.2018 17:54

Zkus se podívat na php.ini, konkrétně sekci session.auto_start: http://php.net/…guration.php#…
Defaultně by to mělo být vypnuté.

Editováno 21.2.2018 17:55
Nahoru Odpovědět
21.2.2018 17:54
the cake is a lie
Avatar

Člen
Avatar
Odpovídá na Petr Čech
:21.2.2018 17:59

Z nějakého důvodu je auto_start zapnutý, takže jdu vypnout. Až se změna projeví předpokládám, že to vyřeší problém s již nastartovanou relací. Jestli se za tím táhla celková nefunkcionalita $_SESSION, problém bude vyřešen, byť je mi záhadou, jak to doteď mohlo fungovat.

Ostatně pro doplnění - jak by automatické zapínání relace mohlo ovlivnit samotnou funkcionalitu (a vysypávání pole $_SESSION)? Díky za odpovědi.

 
Nahoru Odpovědět
21.2.2018 17:59
Avatar

Člen
Avatar
:21.2.2018 18:17

EDIT: Deaktivace auto_startu pomohla s prvním problémem (A session has already been started) ovšem problém s životností pole $_SESSION přetrvává. Po skončení běhu skriptu se pole vysype a do dalšího běhu (aktualizace v prohlížeči) postupuje prázdné pole.

 
Nahoru Odpovědět
21.2.2018 18:17
Avatar

Člen
Avatar
:21.2.2018 19:26

EDIT 2: Zjistil jsem, že nelze ani nastavovat nové COOKIES. Server je schopen využívat v minulosti nastavené COOKIES, ovšem nastavení nových se nedaří.

 
Nahoru Odpovědět
21.2.2018 19:26
Avatar
Lasvit
Člen
Avatar
Odpovídá na
Lasvit:21.2.2018 19:37

Koukni do php.ini na session.gc_maxlifetime()

 
Nahoru Odpovědět
21.2.2018 19:37
Avatar

Člen
Avatar
Odpovídá na Lasvit
:21.2.2018 19:54

K této položce bohužel nemám ve správě přístup. :/
Phpinfo() hlásí maxlifetime 1440 sekund (24 minut), což je na SESSION i COOKIES, které zobrazuji v rozpětí pár sekund mimo problém.
Navíc dříve nastavené COOKIES jedou v pořádku, jen nově nastavené jsou ignorovány.

Podotýkám, že zdrojový kód neprošel žádnou úpravou (COOKIES jsou nastavovány stále stejným způsobem, SESSION také).

 
Nahoru Odpovědět
21.2.2018 19:54
Avatar

Člen
Avatar
:21.2.2018 20:41

EDIT: Uploadoval jsem poslední verzi webu z lokálu na vzdálený server a vše už funguje. V čem byl zakopaný pes opravdu netuším a stále mi vrtá hlavou, proč můj výše uvedený kód nefungoval/ne­funguje. Magii zdar a všem díky.

 
Nahoru Odpovědět
21.2.2018 20:41
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na
Petr Čech:21.2.2018 21:28

Pravděpodobně někdo rozbil nastavení serveru.

Nahoru Odpovědět
21.2.2018 21:28
the cake is a lie
Avatar
Lasvit
Člen
Avatar
Lasvit:21.2.2018 23:08

Mám pocit, že to bude něco s nastaveným limitem pro sessions a cookies

 
Nahoru Odpovědět
21.2.2018 23:08
Avatar
Šimon Rataj
Člen
Avatar
Odpovídá na
Šimon Rataj:8.3.2018 22:11

Zkus ini_get() http://php.net/ini-get

Editováno 8.3.2018 22:12
 
Nahoru Odpovědět
8.3.2018 22:11
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 13 zpráv z 13.