Geniální session v PHP - Krutá realita

Geniální session v PHP

12.03.2005

cookie

Před nedávnem jsem v době psaní příspěvku na tento blog dostal neuvěřitelnou chuť udělat si horkou čokoládu. Tak jsem pohodlně zašel do kuchyňky, připravil si čokoládu a cestou k počítači mě zdrželo nové číslo počítačového magazínu. Nu což blog chvilku počká, nebo ne?

Po přibližně půl hodině jsem klidně usedl odpočatý k svému počítači, dopsal příspěvek, kliknul na tlačítko přidat a ... Ano hádáte správně, systém mě automaticky odhlásil a můj příspěvek skončil v propadlišti dějin a již se jej nikdy nedočkáte.

Kéž bych tento problém měl pouze sám, bohužel jej mají i jiní, třeba naši klienti, kteří si zajdou na oběd do luxusní restaurace a po návratu je systém automaticky odhlásí. Proto jsem se rozhodl upravit weby napsané v PHP tak, aby uživatel po dobu otevření stránky nikdy nebyl automaticky odhlášen.

Můj skript využívá jednoduché funkce javascriptu, jež načte po svém zavolání externí javaskriptový soubor, kterým je samozřejmě PHP soubor generující nové session id.

function refresh() { // odmazeme stary skript, pokud existoval var hlavicka = document.getElementsByTagName('head')[0]; var dataLoader = document.getElementById('scriptLoader'); if(dataLoader) hlavicka.removeChild(dataLoader);   // vytvorime novy element script script = document.createElement('script'); script.id = 'scriptLoader'; script.src = 'reload.php?reload='+Math.random();   // vlozime do stranky, cimz prohlizec stahne skript x = document.getElementsByTagName('head')[0]; x.appendChild(script); timeout(); return false; }

Poté je potřeba ještě tuto funkci každých 5 minut zavolat, na to používám javaskriptovou funkci SetTimeout

function timeout() { setTimeout( "refresh()", 5*60000 ); // get session id every 5 minutes }

Nakonec si zajistíme, aby se automatické přihlašování vždy spustilo po načtení stránky takto:

<body onload="timeout()">

Nakonec na server uložíme PHP skript reload.php, jež automaticky vygeneruje nové session ID

<?php // destroy old session session_start(); $SESSION = $_SESSION; session_destroy();   // save new session session_start(); session_regenerate_id(); $_SESSION = $SESSION; session_write_close(); ?>

A nyní můžeme příspěvek psát třeba celou noc a nikdy o něj nepřijdeme. No uznejte není to geniální?  :-D

Přidat komentář

:-D 8-) :-) ;-) :-o :-( :evil: :idea:

Pro příspěvky je vyžadována podpora obrázků

Pro ověření zde prosím napište text, který vidíte na obrázku

Re: Geniální session v PHP od Anonymous

13.03.2005 #

Nevím jak v PHP, ale v ASP.NET je autentizace od session oddělena, a pokud při přihlášení nastavím jeden parametr, uloží se normální cookies s nastavenou expirací, takže k odhlášení nedojde. Přijde mi to jednodušší, než to řešit JavaScriptem na klientovi.

Ostatně, když už na klientovi, není jednodušší udělat IFRAME a v něm META REFRESH?

Re: Geniální session v PHP od markon

13.03.2005 #

IFRAMEs v XHTML už neexistují. Navíc nárok na přenosové pásmo je vyšší, protože u IFRAME je potřeba přenášet HTML kód s META TAGem, zatímco u Javascriptu stačí přenášet pouze hlavičky.

Re: Geniální session v PHP od dgx

16.03.2005 #

To není koncepční řešení. Web by měl fungovat jako klasická aplikace, a přihlášení zavolat jako "funkci", která se "returnem" vrátí po zadání hesla zase zpět, tedy k rozpracovanému článku.

Tohle není příliš složité na implementaci. Navíc to stačí vyřešit jen jednou a pak používat ve všech aplikacích (a nejen při odhlášení/přihlášení, ale při jakékoliv chybě, která vyvolá jinou stránku a mohla by ztratit původní data)

Re: Geniální session v PHP od Llaik

09.04.2005 #

iframe v xhtml existuji, tedy konkretneji v XHTML1.0 Transitional. Ale existuji  :)

jinak reseni je to takove ... balastici. Pokud potrebuji autorizaci, tak si udelam takovou, jaka mi vyhovuje. Neni preci mozne mit vyprseni autorizace nastavene treba na 10minut a obchazet to automatickym volanim skriptu co 5 minut, ktery nedela nic jineho, nez nuluje nejaky "zivotni counter". Nevim, jak bych takoveto reseni popisoval do dokumentace  :)

Re: Geniální session v PHP od tark

17.08.2005 #

Já vím, proč používám cookies s životností buď 1 měsíc nebo hodinku (sdílený comp)  :-)

Re: Geniální session v PHP od Petr

24.07.2006 #

Tohle opravdu docela vychytavka .. ale zaroven podotykam: automaticke odhlasovani tam plni svou funkci. Je to tak mene bezpecne ..

Re: Geniální session v PHP od a

06.03.2008 #

a

Re: Geniální session v PHP od Slash

15.04.2008 #

Bohužel toto nefunguje v KHTML prohlížečích.