Vypršení životnosti relace – vyřešení pomocí AJAX

16. 4. 2010 11:34 (aktualizováno) Tomáš Neděla

V předchozím článku o vypršení životnosti relace jsem popisoval dvě možnosti, jak tento problém řešit.

První možnost byla prodloužit životnost relace přímo v nastavení PHP, avšak tato možnost se zdá bytí neschůdná, neboť zbytečně zatěžuje server a může vést až k výpadku serveru.

Druhá možnost se opírá o prodlužování relací. V této části článku vytvořím službu s využitím AJAX, která nám bude automaticky prodlužovat relace a tím uchovávat data aktivního uživatele na serveru.

Nekončící relace pomocí dvou skriptů

Za prvé bude nutné vytvořit soubor sessionHolder.js, který obsahuje funkce pro komunikaci se serverem:

function sessionHolderStart() { if (HTTP_PATH) url = HTTP_PATH+'session_holder.php'; else url = '/session_holder.php'; if (window.XMLHttpRequest) { self.HTTPrequest = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { self.HTTPrequest = new ActiveXObject("Msxml2.XMLHTTP"); } catch (eror) { self.HTTPrequest = new ActiveXObject("Microsoft.XMLHTTP"); } } self.HTTPrequest.open("GET", url, true); self.HTTPrequest.send(null); } sessionHolderInterval = window.setInterval(sessionHolderStart, 10 * 60 * 1000);

Jak vidíme, jedná se o celkem jednoduchý skript, který obsahuje funkci, pomocí níž AJAX navazuje spojení se serverem a zavolá skript session_holder.php. Tato funkce je následně předána do intervalu, který probíhá co 10 minut. Jediný zmatek v souboru může způsobovat proměnná HTTP_PATH , která je ve funkci použita. Vězte, že se jedná o proměnou, kterou standardně používám při vývoji na localhost. Jelikož na localhostu nedefinuji DOMAIN NAME pro každý projekt, tak by:

url = '/session_holder.php';

odkazoval do ROOTu neexistujícího webu/adresy. Proto si na začátku HTML definuji HTTP_PATH, který směřuje přímo do ROOTu určitého projektu.

Dále musíme vytvořit PHP skript session_holder.php, který je právě díky AJAXu volán:

<?php session_start();

?>

kupodivu v něm volám pouze jednu funkci session_start. Pokud se podíváte na článek o vypršení životnosti relace, kde vysvětluji implementaci relací do PHP, tak je Vám zcela jasné, co daný skript provede. Ano, tento skript zaktualizuje soubor relace a tím pádem prodlouží jeho platnost a díky tomu, že je neustále volán co 10 minut, nemůže se stát, že by relace kdykoli vypršela.

Sumarizace

Díky těmto skriptům, které jsou z hlediska náročnosti na webový server velmi jednoduché, lze účelově vytvořit nikdy nekončící relaci a tím uspokojit uživatelé internetu, kteří již nebudou nadávat na samoúčelné vymazání Jejich objednávky z košíku.

Sdílet

Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).