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

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ů

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);

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

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.