java会话管理
发布时间:2020-12-15 05:15:54 所属栏目:Java 来源:网络整理
导读:我正在使用一个小型webapp来获得乐趣,目前只使用 Java Servlet.我有两个页面,test1和test2.目前我在test1中创建一个新会话,如下所示: HttpSession session = request.getSession(true); if (session.isNew() == false) { session.invalidate(); session = r
我正在使用一个小型webapp来获得乐趣,目前只使用
Java Servlet.我有两个页面,test1和test2.目前我在test1中创建一个新会话,如下所示:
HttpSession session = request.getSession(true); if (session.isNew() == false) { session.invalidate(); session = request.getSession (true); } 在test2中,我正在检索会话,如下所示: HttpSession session = request.getSession(false); if (session == null) { throw new ServletException ("No session."); } 所以问题是如果我先去test2,我总是得到一个有效的会话,因为浏览器会创建一个.我想限制从test1到test2的流程,所以我必须先进入test1.我的计划是最终创建一个创建会话的登录页面,但我在这里看到的问题仍然存在. 我该怎么处理?我希望任何想法都不包括第三方库.我这样做是为了学习练习. 谢谢! 解决方法
这毫无意义.忘记request.getSession(boolean).只需通过request.getSession()获取会话,从不担心nullness / validness.
如果要通过会话属性传递数据,那么只需在test1中执行: request.getSession().setAttribute("test","foo"); 并且在test2中(当然在test1之后的同一会话中请求): String test = (String) request.getSession().getAttribute("test"); // Returns "foo". 编辑:关于使用会话检查登录用户,只需执行类似登录代码的操作: User user = userDAO.find(username,password); if (user != null) { request.getSession().setAttribute("user",user); } else { // Show error? } 然后在 if (((HttpServletRequest) request).getSession().getAttribute("user") != null) { chain.doFilter(request,response); // Just continue. } else { ((HttpServletResponse) response).sendRedirect("login"); // Not logged-in,redirect to login page. } 当您注销时,只需从会话中删除用户: request.getSession().removeAttribute("user"); // Or,more drastically: request.getSession().invalidate(); 或者,您也可以借助web.xml和server.xml中的一些简单条目来查看声明性Container Managed Security.这样您就不必为自己的登录/过滤逻辑烦恼了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |