Сесия (сесия) в Java, блог за криптиране
Когато посетите опции уеб ресурси и за заявките на клиентите, информация за контекста на клиентите не се съхранява. В протокола HTTP, няма възможност да се спести и да променят информация за предишни посещения на клиентите. Това води до проблеми в разпределени системи в различни нива на достъп за различните потребители. Действия, които могат да направят системния администратор не може да изпълнява гост. В този случай, е необходимо да се провери с потребителските права при преместване от една страница към друга. В други случаи се изисква информация за предишни искания на клиентите. Има няколко начина за съхраняване на актуална информация за връзките с клиенти или няколко клиента към сървъра.
Сесия (сесия) - връзката между клиента и сървъра, задаване на определен период от време, през който клиентът може да изпраща към сървъра на произволен брой заявки. Сесия е установено директно между клиента и уеб-базиран сървър. Всеки клиент сам да определя сървъра сесия.
Сесиите се използва за съхраняване на данни по време на многобройните запитвания на уеб-страница или в обработката на информация, вписана в обичай форма в резултат на няколко на HTTP-връзки (например, клиентът прави няколко покупки в онлайн магазина, студентът отговорите на някои тестове в системата за управление на обучението на) , Като правило, когато се работи с една сесия да се появят следните проблеми:
· Подкрепа за разпределено сесия (синхронизация / репликация на данни, уникални идентификатори, и т.н.);
· Проблем обезсилване на сесия (изтичане), като предупреди потребителя за унищожаването на сесията и възможността за разширяване на неговия обхват (пазач).
За да отворите нова сесия, използвайте getSession () метод на интерфейса на HttpServletRequest. Метод извлича от преминалата към обект HttpSession клас сесия искане сървлет, свързана с потребителя. Сесията включва информация за датата и часа на последния достъп
на сесията, което може да се екстрахира от методи
getCreationTime () и getLastAccessedTime ().
Ако метод getSession (booleanparam) входен параметър е вярно. проверките на сървлет контейнер дали на активна сесия, установени с клиента. При успех, този метод се връща манипулатор на сесията. В противен случай, той създава нова сесия:
HttpSession SE = request.getSession (истина);
След това започва да събира информация за клиентите.
За да се запази стойността на променливата в текущата сесия, на метод setAttribute (HttpSession клас). прочетете - getAttribute (). премахване - removeAttribute (). Избройте имената на всички променливи, които се записват в текущата сесия, могат да се приготвят с помощта EnumerationgetAttributeNames (метод). Тя работи по същия начин, както на съответния метод за HttpServletRequest интерфейс.
StringgetId () метод връща уникален идентификатор, който получава всяка сесия да се създаде. isNew () метод връща невярна за вече съществуваща сесия и вярно - новосъздадената.
Ако искате да се запишете за да използвате един от променливата на сесията е цяло число, тогава:
se.setAttribute ( "teacherId", нов цяло число (71));
След това, всеки свързан с текущата сесия сървлета да прочетете teacherId стойност на променливата, както следва:
Цяло число testId = (цяло число) se.getAttribute ( "teacherID");
Край на сесията може да обезсили метод (). Сесия унищожава всички отношения с обектите, както и данните, съхранявани в старата сесия ще бъдат загубени за всички приложения.
/ * Пример # 1 за добавяне на информация за сесията: SessionServlet.java * /
publicclass SessionServlet разширява HttpServlet
publicstaticvoid printToBrowser (
HttpServletResponse респ, HttpServletRequest REQ)
HttpSession сесия = req.getSession (истина);
PrintWriter от = resp.getWriter ();
StringBuffer URL = req.getRequestURL ();
out.write ( "Моята сесия брояч:");
/ * Брой искания, които бяха направени към настоящия сървлет текущия потребител в текущата сесия на потребителя (това би трябвало да доведе до стойност низ позовавайки се показва правилно в резултат) * /
out.write ( "
Време на създаване. "
out.write ( "
Време на последен достъп. "
out.write ( "
ID сесия. "
out.write ( "
Вашият URL: "+ URL);
Int timeLive = 60 * 30;
out.write ( "
Задайте макс неактивна интервал. "
> Улова (IOException д)
thrownew RuntimeException ( "Неуспешно." + д);
/ * Увеличава справка броят на текущата сървлет и го слага в една сесия * /
privatestaticint prepareSessionCounter (
В резултат на това ще бъдат показани на браузъра:
Тъй като данните за сесията са: кликвания се противопоставят - цяло число тип обект и заявка URL съхраняват в обекта StringBuffer. В отговор на Павел zovatelsky SessionServlet искане сървлет връща HTML страница, която показва всички признаци на сесията, времето за създаване и последен достъп, идентификационен номер на сесията, и времето на недействителност (на живота) сесия. Този път може да се настрои с помощта на сесията-довереник маркер към web.xml под формата на:
където времето за изчакване е разположен в минута.
Следващият пример адресирано процеса на премахване на сесията при липса на дейност за определен период от време.
/ * Пример # 2 невалидност и премахването на сесията: TimeSessionServlet.java * /
publicclass TimeSessionServlet разширява HttpServlet
булева флаг = вярно;
protectedvoid doGet (HttpServletRequest REQ,
privatevoid performTask (HttpServletRequest REQ,
HttpServletResponse респ) хвърля ServletException
HttpSession сесия = нула;
// създаване на сесия и да зададете време обезсилване
Int timeLive = 10; // Десет секунди!