-1

我需要在会话超时时将页面重定向到索引页面。我的 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");
    }

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

4

2 回答 2

2

只要客户端没有发送 HTTP 请求,您就无法发送 HTTP 响应。就那么简单。这就是 HTTP 的工作原理。如果任何网站能够在没有客户端请求的情况下不经意地推送 HTTP 响应,那么 Internet 看起来会非常不同。

如果您基本上是单页 web 应用程序,则基于客户端键盘/鼠标活动的基于 JavaScript 的心跳(如此处回答)或元刷新标头(如此处回答)将是解决方案(因此,您实际上没有使用会话范围但视图范围),但是如果您在同一会话中的多个选项卡/窗口中打开页面,则效果不佳。

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

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

于 2013-08-09T05:25:03.963 回答
0

您可以在会话超时的情况下将 JavaScript 刷新片段放入响应页面。

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

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

于 2013-08-09T05:18:14.683 回答