как реализовать отслеживание сеанса для страниц jsp

Я использую технологию jsp в своем проекте. Я хочу отслеживать сеансы в своей форме входа. После выхода из системы, когда я нажимаю кнопку «Назад», должно отображаться, что сеанс истек. Пожалуйста, помогите мне.


person Khaja moin    schedule 08.11.2010    source источник


Ответы (2)


Вам не нужно делать это вручную. Контейнер сервлетов сделает это за вас. Вы можете получить доступ к отслеживаемому сеансу с помощью HttpServletRequest#getSession(). Все, что вам нужно сделать, это указать вошедшего в систему пользователя в качестве атрибута сеанса.

request.getSession().setAttribute("user", user);

Пусть остальная часть вашего кода перехватит это. Обычно для этого используется Filter.

if (request.getSession().getAttribute("user") == null) {
    // Not logged in. Redirect to login page.
    response.sendRedirect("login.jsp");
} else {
    // Logged in. Just continue request.
    chain.doFilter(request, response);
}

Когда вы вызываете выход из системы, просто удалите пользователя из сеанса.

request.getSession().removeAttribute("user");

Контейнер сервлетов также будет управлять истечением сеанса. Когда срок его действия истечет, HttpSession будет просто уничтожен, включая все его атрибуты.

Что касается вопроса о кнопке «Назад», просто скажите клиенту не кэшировать ответ, чтобы он был вынужден запустить новый запрос, который затем будет передан через Filter. Эта клиентская инструкция должна выполняться путем соответствующей настройки заголовков ответа. Это можно сделать и в Filter.

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
person BalusC    schedule 08.11.2010

Во-первых, создание и уничтожение сеанса:

Используйте HttpSessionListener.

Реализуйте sessionCreated(HttpSessionEvent se) с выводом, говорящим о том, что сеанс создан.

Реализуйте sessionDestroyed(HttpSessionEvent se) с выводом, сообщающим вам, что сеанс был уничтожен. То есть пользователь вышел из системы или срок действия сеанса пользователя истек.

Теперь средняя часть. Используйте фильтр с соответствующей web.xml записью *.jsp для этого фильтра. Внутри вашего фильтра используйте doFilter(ServletRequest request, ServletResponse response, FilterChain chain). Превратите ServletRequest в HttpServletRequest. Используя этот запрос, у вас будет много методов, которые вы можете использовать для отслеживания сеанса. Учетные данные пользователя, URL-адрес посещения, практически все, что может представлять интерес.

person darioo    schedule 08.11.2010