Diskuze: Ako nastaviť php session cookie aby sa nemazal po zavretí prehliadača?

PHP PHP Ako nastaviť php session cookie aby sa nemazal po zavretí prehliadača? American English version English version

Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Matúš Petrofčík:

Zdravím kolegovia, naskytol sa mi menší problém a neviem si rady :D
Potrebujem nastaviť, aby sa mi koláčik obsahujúci Session ID v prehliadači po ukončení relácie (sedenia, zavretie prehliadača) NEVYMAZAL.

Skúsil som to takto:

setcookie(session_name(), session_id(), time()+60*60*24*30);

Koláčik síce informuje, že sa vymaže až o mesiac, ale aj napriek tomu sa po zavretí prehliadača vymaže.

Poradíte mi prosím čo je potrebné urobiť, aby sa nevymazával? Ďakujem

Odpovědět 27.7.2014 14:04
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Matúš Petrofčík
Matúš Petrofčík:

Chyba je zjavne len u prehliadača Google Chrome :/

Nahoru Odpovědět 27.7.2014 16:19
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Michal Žůrek (misaz):

:D :D to bylo první co mě napadlo dodat, ale pak jsem si řekl, že moje hledání chyb v Chrome by bylo až moc rýpavé :D :D

Nahoru Odpovědět 27.7.2014 16:22
Nesnáším {}, proto se jim vyhýbám.
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Matúš Petrofčík:

celý deň sa tu s tým hrajem, a náhodou, ale naozaj náhodou som otvoril IE 10, tak som to vyskúšal, a žiaden problém :D je to trochu smutné že taký rozšírený prehliadač a taka banálna chybka

btw mohol si mi tvoj prvý nápad napísať a ušetril by som si času :D

Nahoru Odpovědět 27.7.2014 16:25
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Michal Žůrek (misaz):

já když něco programuju, tak když mi v chrome něco nefunguje, první co udělám je test v jiném prohlížeči. Hned druhý nejčastěji bývá dotaz do google

XYZ does not work in chrome

na stackoverflow je většinou nějaké řešení

Editováno 27.7.2014 16:29
Nahoru Odpovědět 27.7.2014 16:28
Nesnáším {}, proto se jim vyhýbám.
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Marek Z.:

Stačí nastavit lifetime pro session cookie parametr. Tedy:

<?php
    session_set_cookie_params(600);
    session_start();

A tohle by mělo stačit aby se ti session ID uložilo do cookie na 10 minut, například.

Prostuduj si tuto stránku: http://php.net/…e-params.php - Všimni si třeba položky httponly či secure, jak u klasické cookie.. :)

Nahoru Odpovědět 27.7.2014 18:56
Chybami se člověk učí, běžte se učit jinam!
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Matúš Petrofčík:

Marek Z.: už preštudované :) dík

Nahoru Odpovědět  +1 27.7.2014 22:22
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Matúš Petrofčík:

Marek Z.: nakoniec som to vyriešil aj takto:

...
// nastavenie session
ini_set("session.name", "id");
ini_set("session.cookie_httponly", true);
ini_set("session.cookie_lifetime", 60*60*24*30); /* mesiac v sekundách */
ini_set("session.cache_expire", 60*24*30); /* mesiac v minútach */
...

zaručím si aj to, aby sa mi zo serveru nevymazalo pole s daným session? ďakujem

Nahoru Odpovědět 27.7.2014 22:26
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Marek Z.:

Mělo by zůstat na serveru, dokud mu nevyprší zasedání. Ale dal jsi mi docela brouka do hlavy, tohle se myslím řeší přes session name.
Rychle řečeno: Uložíš jsi jméno skupiny zasedání, kterou si po dobu lifetime můžeš kdykoliv obnovit. Myslím, že to takhle funguje, pokud ji ovšem nezavoláš tak při nastartování dalšího zasedání by se mělo to staré smazat..

Nahoru Odpovědět 27.7.2014 22:36
Chybami se člověk učí, běžte se učit jinam!
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Matúš Petrofčík:

Marek Z. : Jak ako uložiť meno sessionu a potom obnoviť? Som trošku nepochopil :/

Ak by to nešlo inak, tak by som ten session mohol nejako ukladať do databázy.

Nahoru Odpovědět 28.7.2014 2:29
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Marek Z.:

Omlouvám se, trochu jsem to nejspíše popletl, či už si to nepamatuji.

Zkoušel jsme to a dospěl jsem k tomu, že pokud budeš mít stále uložené session id, tak hodnoty, které jsi uložil stejně zůstanou na serveru. Zasedání, prostě zůstane uložené na dobu co id. Tedy, tak mi to funguje na localce při výchozích nastaveních.

Uložil jsem si id a čas, smazal jsem id z cookie a čas se také smazal. Tak jsem to tedy pochopil.. :D

Také bych ti ještě poradil, vždy před provedením nějaké citlivější operace, přihlášení nebo něco jiné, použít session_regene­rate_id(). Kvůli Session Fixation.. :)

Editováno 28.7.2014 9:01
Nahoru Odpovědět  +1 28.7.2014 8:59
Chybami se člověk učí, běžte se učit jinam!
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 11 zpráv z 11.