Supersession proměnné

Nevýhoda bezstavového protokolu HTTP se asi nejvíce projevuje při používání proměnných. I globální proměnné jsou běžně platné jen během jednoho klientského dotazu, jednoho běhu skriptu, poté se jejich hodnota nenávratně ztrácí. Proto byly implementovány sessions a jejich session proměnné. Session proměnné uchovávají svou hodnotu napříč různými dotazy uživatele po celou dobu existence příslušné session. Session proměnnou může být jakákoliv globální proměnná, kterou programátor zaregistruje do aktuální session. Systém sám na počátku zpracování každého dalšího dotazu obnoví její hodnotu a stejně tak na konci zpracování ji opět uloží.

Framework phpBASE rozšiřuje a zobecňuje pojetí session proměnných a na jejich místo zavádí supersession proměnné. Při zaregistrování každé takové proměnné zadává programátor kontext, v rámci kterého bude platná. Jinými slovy tím určuje, kde všude se daná proměnná bude obnovovat a ukládat, a kde naopak bude fungovat jen jako normální proměnná. U některých dílčích kontextů lze navíc určit chování proměnné při jejich změně.

Pro každou supersession proměnnou lze při jejím zaregistrování určit následující kontexty a jejich vzájemné kombinace:

Modul či komponenta

Proměnná se může obnovovat buď v celé aplikaci, nebo jen v určeném modulu, anebo dokonce jen v konkrétní komponentě. Například mějme v jednom modulu část aplikace poskytující chat. Budeme-li zde chtít uložit pro akuálního uživatele jeho nastavení (například frekvenci obnovování výpisu zpráv, počet zobrazovaných zpráv, jeho osobní barvu apod.), je zbytečné ukládat tyto informace s platností pro celou aplikaci. Omezíme tedy kontext příslušných proměnných jen na modul s chatem. Stejně nazvané proměnné pak můžeme registrovat třeba v jiných modulech, ale tam bude se jednat o úplně jiné proměnné, jejich hodnoty se s těmi z chatu navzájem neovlivní. Při případné kolizi (například jedna proměnná s kontextem pro celou aplikaci a další stejně pojmenovaná s kontextem pro konkrétní komponentu) má přednost specifičtější proměnná.

Klient

Taková proměnná bude platná pro všechny přístupy z daného počítače. Identifikaci počítače lze volitelně nastavit buď přes IP adresu (nehodí se pro sítě maskované za jedinou IP adresou) nebo přes perzistentní cookie uloženou do prohlížeče nebo kombinací obou variant. Typické využití se nabízí pro různá předvyplněná formulářová pole u anonymních nepřihlášených uživatelů apod.

Session

Proměnná s tímto kontextem bude platná jen po dobu trvání aktuální session. Pokud vynecháme ostatní kontexty, pak se jedná o klasickou session proměnnou tak, jak ji známe. Naopak, zajímavé možnosti nabízí zejména v kombinaci s následujícím uživatelským kontextem, za podmínky vhodného nastavení vzájemných přechodů při změně kontextu.

Uživatel

Supersession proměnná registrovaná v kontextu aktuálního přihlášeného uživatele je platná vždy, když je tento uživatel přihlášen. Vhodná je tedy zejména k uložení různých uživatelských údajů, jako jsou kontaktní údaje, osobní nastavení aplikace apod. U tohoto kontextu je nutné určit, jak se má proměnná chovat, jestliže s aplikací pracuje nepřihlášený uživatel. Buď může být normální neregistrovanou proměnnou, anebo se z ní může stát session proměnná (jejíž hodnota se po ukončení session samozřejmě ztratí). V takovém případě se ale musí specifikovat, co se má stát s obsahem proměnné při případném přihlášení/odhlášení uživatele. Neboli zda se má její obsah přenášet, či vynulovat. Například proměnné s osobními údaji přihlášeného uživatele bude lepší po odhlášení vynulovat (po logoutu z nich budou session proměnné, ale s prázdnými hodnotami), naopak vybraný skin by klidně mohl zůstat i po odhlášení nastavený.