2014-04-29 5 views
3

Я работаю над JSP. Я знаю, что есть много сообщений по этой теме, но для меня ничего не работает. У меня есть страница входа, которая приводит к приветственной странице. Сеанс недействителен, когда пользователь нажимает на выход и затем перенаправляется на страницу входа. Но если пользователь нажимает кнопку «Назад браузеров», он снова выводится на страницу приветствия, хотя если он нажмет любую другую кнопку или обновит страницу, он будет переведен на страницу входа в систему, поскольку срок действия сессии истек. Но я не хочу, чтобы пользователь мог получить доступ к странице приветствия, нажав кнопку «Назад браузера», как только он выйдет из системы. Я пробовал использовать следующее:Отключить кнопку браузера, если сеанс недействителен

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> 
<meta http-equiv="Pragma" content="no-cache" /> 
<meta http-equiv="Expires" content="-1" /> 

но он не работает.

Я попытался с помощью:

window.history.forward(1); 

он отлично работает, но это приводит к другой проблеме. Если пользователь входит в систему и отправляется на страницу приветствия. то пользователь нажимает кнопку, скажем, «покажет детали пользователя», и пользователь будет отправлен на страницу «показать данные пользователя». теперь, если пользователь нажимает кнопку «Назад», чтобы вернуться на страницу приветствия. Он остается на одной и той же странице «показать пользовательские детали» из-за window.history.forward(1) на странице приветствия.

Я хочу, чтобы пользователь мог использовать кнопку возврата браузеров, если сессия действительна. Если сеанс недействителен, он не сможет использовать кнопку браузера назад.

+0

фигу, я получил это .. !! – learner

+0

$(). Ready (function() { if (document.referrer! = 'Http: // localhost: 8181 /') { history.pushState (null, null, 'login'); window.addEventListener ('popstate', function() { история.pushState (null, null, 'login'); }); } }); –

ответ

4

Это прекрасно работает. Для очистки кеша я использовал следующее. и я аннулирую сессию в logout.jsp, при нажатии на нее проверяется некоторый атрибут токена (который устанавливается при входе пользователя в систему), и если он не находит его, он перенаправляется на страницу входа.

<% 

response.setHeader("Cache-Control","no-cache"); 
response.setHeader("Cache-Control","no-store"); 
response.setHeader("Pragma","no-cache"); 
response.setDateHeader ("Expires", 0); 
    if(session.getAttribute("token")==null){ 
    response.sendRedirect(request.getContextPath() + "/LogOut.jsp"); 

} 
%> 

спасибо за предложение. Я непременно введу его в действие. каждая помощь и предложение приветствуются.

5

Вы можете отключить кнопку «Назад» на выходе . так что пользователь не может вернуться, как только он нажал на выход из системы. Добавить этот скрипт на страницу,

<SCRIPT type="text/javascript"> 
    window.history.forward(); 
    function noBack() { window.history.forward(); } 
</SCRIPT> 

, а также в вашем JSP,

<BODY onload="noBack();" 
    onpageshow="if (event.persisted) noBack();" onunload=""> 

Другое предложение Dont слепо перенаправить пользователя на страницу входа, если сеанс получает истек. просто укажите ссылку для входа на страницу выхода на сайт

Надеюсь, это поможет!

+0

спасибо .. !! :) – learner

0

Попробуйте этот код

Добавить этот класс "NoCacheFilter" в проекте

@WebFilter(servletNames = { "Faces Servlet" }) 
public class NoCacheFilter implements Filter { 

/** 
* doFilter Method. 
* <p> 
* 
* <pre> 
* 
* </pre> 
* 
* </p> 
* @param request 
* @param response 
* @param chain 
* @throws IOException 
* @throws ServletException 
*/ 
@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, 
     ServletException { 
    HttpServletRequest req = (HttpServletRequest) request; 
    HttpServletResponse res = (HttpServletResponse) response; 

    if (!req.getRequestURI().startsWith(req.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) {                            

     res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 
     res.setHeader("Pragma", "no-cache"); 
     res.setDateHeader("Expires", 0); 
    } 

    chain.doFilter(request, response); 
} 

/** 
* Initial Method. 
* <p> 
* 
* <pre> 
* 
* </pre> 
* 
* </p> 
* @param filterConfig 
* @throws ServletException 
*/ 
@Override 
public void init(FilterConfig filterConfig) throws ServletException { 
} 

/** 
* Destroy Method. 
* <p> 
* 
* <pre> 
* 
* </pre> 
* 
* </p> 
*/ 
@Override 
public void destroy() { 
} 
} 

https://eclipse.googlesource.com/eclipselink/examples/mysports/+/b37750abf978fc8daee30ef4c214cf88857371b3/admin.web/src/main/java/eclipselink/example/mysports/admin/jsf/NoCacheFilter.java

Смежные вопросы