栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

控制是否更新会话时间戳

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

控制是否更新会话时间戳

访问 时间
在访问
会话时更新

HttpServletRequest#getSession
。因此,如果您确定不篡改该会话,则应该可以。
更新:
基于JavaDoc,上述说法是不正确的(即使您彻底搜索了源代码,也没有找到造成这种行为的任何代码)。

另一方面,如果您需要访问AJAX请求中的会话,那么您就很费力。我能想到的唯一解决方案是

lastAccessTime
手动存储(例如,在servlet过滤器中),然后检查会话超时并手动使会话无效(例如,在同一过滤器中)。那应该很简单并且易于实现。


更新: 仅出于乐趣,我实现了过滤器(未测试):

public class SessionInvalidationFilter implements Filter {    private static final String LAST_ACCESS_SESSION_ATTR = "lastAccessTime";    private static final long SESSION_TIMEOUT = 1000 * 60 * 20; // 20 minutes    private static final String IGNORE_ACCESS_URI = "/this/will-not/update/access-time";    @Override    public void init(FilterConfig arg0) throws ServletException {    }    @Override    public void destroy() {    }    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        // Cast to HTTP request and response        HttpServletRequest httpRequest = (HttpServletRequest) request;        HttpServletResponse httpResponse = (HttpServletResponse) response;        // Check if we are handling standard request        if (!IGNORE_ACCESS_URI.equals(httpRequest.getRequestURI())) { chain.doFilter(new SessionAccessAwareRequest(httpRequest), response); return;        }        // Now we can handle the special case of non-tracked request        boolean expired = false;        HttpSession session = httpRequest.getSession(false);        if (session == null) { // No session means the AJAX contained no or incorrect JSESSIonID expired = true;        } else { Long lastAccessTime = (Long) session.getAttribute(LAST_ACCESS_SESSION_ATTR); if (lastAccessTime == null || lastAccessTime + SESSION_TIMEOUT < System.currentTimeMillis()) {     session.invalidate(); // Invalidate manually     expired = true; }        }        // Handle error or process normally        if (expired) { httpResponse.sendError(HttpServletResponse.SC_BAD_REQUEST);        } else { chain.doFilter(request, response);        }    }    private static class SessionAccessAwareRequest extends HttpServletRequestWrapper {        public SessionAccessAwareRequest(HttpServletRequest request) { super(request);        }        @Override        public HttpSession getSession() { return getSession(true);        }        @Override        public HttpSession getSession(boolean create) { HttpSession session = super.getSession(create); if (session != null) {     session.setAttribute(LAST_ACCESS_SESSION_ATTR, System.currentTimeMillis()); } return session;        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/394350.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号