在java中的会话超时重定向页面

时间:2013-08-09 04:28:29

标签: java session servlets

我需要在会话超时时将页面重定向到索引页面。我的sessionDestroyed方法是这样的;

 @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        HttpSession sess = se.getSession();
        HttpServletRequest request = null;
        String username  = (String) sess.getAttribute("username");
        LogoutDao lgod = new LogoutDao();
        lgod.logoutUser(username);
        request.getrequestDispatcher("/index.jsp");
    }

这是我尝试过的,它没有重定向到索引页面。

2 个答案:

答案 0 :(得分:2)

只要客户端未发送HTTP请求,您就无法发送HTTP响应。就那么简单。这就是HTTP的工作原理。如果任何网站能够在没有客户请求的情况下轻松推送HTTP响应,那么互联网看起来会有很大不同。

基于客户端键盘/鼠标活动的基于JavaScript的心跳,如此处所回答的,或者像这里所回答的元刷新标题,如果你基本上是一个单页的webapp(那么,你实际上不是使用会话范围,但视图范围),但如果您在同一会话中的多个选项卡/窗口中打开页面,这将无法正常工作。

理论上,Websockets是向客户端推送内容的正确解决方案,但这又需要一个活动会话。鸡蛋问题。此外,它在目前仍然相对广泛使用的旧浏览器中不起作用,因此它目前仅应用于渐进增强。

最好的办法是定义一个错误页面,用于处理最终用户在会话过期时调用操作的情况。另请参见javax.faces.application.ViewExpiredException:无法恢复视图。

答案 1 :(得分:0)

您可以使用会话的超时时间将JavaScript刷新代码段放入响应页面。

您还可以使用“刷新”字段HTTP标头。

请参阅:http://en.wikipedia.org/wiki/List_of_HTTP_header_fields并搜索“刷新”