Autor | Zpráva | ||
---|---|---|---|
kachnak Profil |
chcel by som sa naucit session prihlasenie.. uz mi to ako tak funguje.. ale mam problem s odhlasenim... ak uzivatel klikne na tlacitko odhlasit <a href=a.php?Q=logout> tak v podmienke pre Q==logout dam sesion destroy... lenze ak zavrem okno a spustim tu istu stranku znovu.. uzivatel je stale prihlaseny.... ako mam spravit aby sa sesion zrusila ak uzivatel zavre okno?.. alebo ako sa to robi? cez nejaky cas? dakujem
|
||
AM_ Profil |
#2 · Zasláno: 14. 5. 2009, 19:05:43
kachnak
založit si vlastní téma neškodí. Tohle se ošetřuje dost špatně, protože na serveru nijak nepoznáš, že uživatel zavřel prohlížeč. Proto se také uživatelé učí, že se musí odhlásit příslušným tlačítkem, a ne pouze prohlížeč zavřít. PHPSESSID cookie má defaultně životnost 0 a tedy se maže při ukončení prohlížeče, ale není to pravidlem. A všimni si, že takhle funguje spousta stránek - i po zavření a otevření prohlížeče zůstaneš přihlášen. |
||
kachnak Profil |
#3 · Zasláno: 14. 5. 2009, 19:09:50
no nechcel som robit zbytocnu temu.... asi to spravim nejak cez cas... ze ulozim do databazy k nicku cas posledneho spustenia stranky... a ak sa bude necinny 10 minut cize stranka sa spusti az o 10 minut znova tak ho odhlasi..
|
||
AM_ Profil |
#4 · Zasláno: 14. 5. 2009, 19:26:53
sessions mají tuhle funkci v sobě, výchozí je 24 minut, v php.ini to jde změnit.
K novému tématu: takhle si každý nejdřív přečte první tři příspěvky a pak zjistí, že se tu vlastně už řeší něco jiného. Nové téma nikomu nepřekáží, až se vyřeší, tak pěkně odjede mezi neaktivní. |
||
Alphard Profil |
#5 · Zasláno: 14. 5. 2009, 19:31:07 · Upravil/a: Alphard
Pro smazání session může použít příklad z manuálu. Měl by fungovat.
Bez komentářů: session_start(); $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } session_destroy(); Když uživatel zavře prohlížeč, měly by se session smazat. AM_: Kdybych si byl jist přesunem do nového threadru, tak už to tam je. Ale mám strach, že to tady smažu. :-( |
||
AM_ Profil |
#6 · Zasláno: 14. 5. 2009, 20:02:14
Alphard
Jen pro upřesnění, session se nemaže, pouze by se měla smazat PHPSESSID cookie a tím ztratit se session spojení. Vzhledem k tomu, že se to děje na straně prohlížeče, to nelze 100% zajistit. |
||
kachnak Profil |
#7 · Zasláno: 14. 5. 2009, 21:15:32
noo nejak mi ten prikaz s tym COOKIE nefunguje.. vlastne ani neviem kam to mam zapisat...
tu je moja skusobna stranka: http://kachnak.esdesign.sk/session/a.php meno:a heslo:a ked sa prihlasite a klikate refresh, tak session existuje.... ked sa odhlasite sesion zanikne... ale ked zavrete okno a znovu otvorite stranku, tak sesion stale existuje... tu je kod tej stranky: http://kachnak.esdesign.sk/session/text.txt kam mam vlozit tu cast s tym cookies a v akom tvare.. ziadne upravi? aby odhlasilo ked zavrem prehliadac.. dakujem |
||
AM_ Profil |
#8 · Zasláno: 14. 5. 2009, 21:36:40
odhlašování při zavření zodpovězeno v [#2]. Ujisti se, že v php.ini je session.cookie_lifetime = 0 ; pak by se měla PHPSESSID po vypnutí prohlížeče smazat a při opětovném zapnutí bys měl být tedy odhlášen (POZOR - pokud zavřeš pouze záložku a prohlížeč pořád běží, tak to nefunguje - to by šlo řešit leda přes JavaScriptovou událost onUnload, která by se už nějak postarala o zrušení SESSION, ale tu podporují jen některé prohlížeče)
|
||
Časová prodleva: 2 měsíce
|
|||
PetrPN Profil * |
#9 · Zasláno: 12. 7. 2009, 00:51:37
Proč nevytvořit jednu proměnnou a přidělit jí PHPSSESID při přihlášení.. a když zavřu okno příště se rovnat nebudou..
např.. session_start(); global $PHPSESSID, $sessid_okna; // ověřovat.. if(($PHPSESSID == $sessid_okna) and ($akce != 'logout')... nebo.. // pokud cookie neexistuje, zkontroluju jestli nejde o první přihlášení a když ne ,vyhodíme uživatele If (!IsSet($autorizace)): if($uzivatel_nove_prihlaseni=='ano'): $uzivatel_nove_prihlaseni='ne'; SetCookie("autorizace", (date("j.n.Y G:i:s",(time()+(900)))), Date("U") + 15*60); else: SetCookie("autorizace"); $akce='logout'; endif; Else: SetCookie("autorizace", (date("j.n.Y G:i:s",(time()+(900)))), Date("U") + 15*60); Endif; Dá se udělat ledacos, jen drobet přemýšlet a mít trpělivost.. |
||
Alphard Profil |
#10 · Zasláno: 12. 7. 2009, 00:58:18
PetrPN:
Jste si vědom, že odpovídáte na dva měsíce starý dotaz? |
||
Časová prodleva: 15 let
|
0