Aplikacje internetowe pojawiają się w dzisiejszych czasach coraz częściej. Nie są to już proste strony w edycją w stylu CRUD z kilkoma polami edycyjnymi na krzyż. Często formularze bywają złożone i wypełnienie ich użytkownikowi zajmuje dużo czasu. Czy zdarzyło Ci się, developerze, że użytkownicy Twojego systemu byli wylogowywani z niego po 15 minutach “nieaktywności”? Oczywiście przez cały ten czas siedzieli przy komputerze, pisali na klawiaturze i używali myszy w Twojej aplikacji. Czy tak powinny działać aplikacje?!?
Otóż oczywiście, że NIE! A rozwiązanie jest bardzo proste. Wystarczy napisać kawałek inteligentnego skryptu który zabezpieczy nas przed taką nieprofesjonalnością.
Skrypt taki powinien:
- rejestrować zdarzenie poruszenia myszy lub wciśnięcia klawisza
- wysyłać żądanie do serwera pod dowolną stronę z obsługą sesji (powinna się ona szybko generować), na przykład w Zend Framework:
public function preserveSession() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); }
- odpiąć zdarzenia aby nie obciążać przeglądarki
- ustawić timeout, który przywróci podpięcie zdarzeń
Poniżej zamieściłem skrypt który wykonuje takie właśnie czynności (wymaga do działania jQuery >= 1.4):
pl = window.pl || {}; pl.mediovski = pl.mediovski || {}; pl.mediovski.technology = pl.mediovski.technology || {}; pl.mediovski.technology.FormSessionHolder = function(parameters) { parameters = parameters || {}; var defaultSettings = { url: '/', timeout: 60 }; var settings = jQuery.extend(defaultSettings, parameters); var timeout = null; var actionEventHander = function(event) { jQuery.ajax({ url: settings.url }); jQuery(document).unbind('mousemove.session-holder'); jQuery(document).unbind('keyup.session-holder'); timeout = setTimeout(function() { jQuery(document).bind('mousemove.session-holder', actionEventHander); jQuery(document).bind('keyup.session-holder', actionEventHander); clearTimeout(timeout); }, settings.timeout * 1000); }; actionEventHander(); }; |
Aby go uruchomić należy załączyć skrypt jako bibliotekę w nagłówku HTML oraz dopisać w dowolnym miejscu poniżej, inicjując obsługę np.:
new pl.mediovski.technology.FormSessionHolder({ timeout: 60, url: '/preserve-session' }); |
,gdzie:
- parametr
timeout
oznacza interwał co jaki czas mają następować odwołania do bramki (podane w sekundach, domyślnie: 60) - parametr
url
oznacza adres do bramki utrzymującej sesję (domyślnie: ‘/’)
Oba parametry są opcjonalne.
Efekt użycia? W momencie gdy użytkownik używa aplikacji, co podany interwał czasu następuje odwołanie do serwera, które powinno nas zabezpieczyć przed wygaśnięciem sesji. Jeżeli użytkownik odejdzie od komputera i nie porusza myszą ani nie pisze na klawiaturze, sesja wygaśnie normalnie. Jest to bardzo prosty trik, który jednakże w znacznym stopniu zmniejsza dyskomfort używania web aplikacji. Nigdy więcej pisania artykułów w Wordzie i kopiowania ich do CMS’a!
Biblioteka do ściągnięcia: jquery.session-holder.js