Mediovski Technology

Sesja, a aktywność użytkownika

Data: 17 Sierpień 2011 18:29 Autor: Krzysztof Suszyński | Kategoria: Javascript

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:

  1. rejestrować zdarzenie poruszenia myszy lub wciśnięcia klawisza
  2. 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();
    }
  3. odpiąć zdarzenia aby nie obciążać przeglądarki
  4. 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

RSS
Get Adobe Flash player