如何验证/无效会话jsp/servlets?

Noa*_*tin 12 session jsp servlets invalidation

当用户成功登录时,我在servlet中打开了会话:

HttpSession session = request.getSession(true);
session.setAttribute("name", name);
Run Code Online (Sandbox Code Playgroud)

然后我在logout.jsp中写道来终止会话:

<%session.invalidate();%>
Run Code Online (Sandbox Code Playgroud)

要检查会话是否有效,我这样做:

HttpSession session = request.getSession();
String name = (String) session.getAttribute("name");
Run Code Online (Sandbox Code Playgroud)

但它没有用,即使在session.invalidate之后,我的会话也有效.有谁知道我在哪里做错了?

Sub*_*der 24

你应该调用session.getSession(false) - 如果没有当前会话,则返回null.

根据文件

HttpSession#getSession(boolean create) - create - 如果需要,可以为此请求创建新会话; 如果没有当前会话,则返回false.

所以会话值检查的正确方法是 -

HttpSession session = request.getSession(false);
if(session!=null)
  session.setAttribute("name", name);
Run Code Online (Sandbox Code Playgroud)

一旦你使会话无效 -

HttpSession session = request.getSession(false);
if(session!=null)
session.invalidate();
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,所以request.getSession(false)如果会话处于活动状态,会返回什么?对不起,我想真的明白这一点. (2认同)
  • 这是正确的答案.只是为了添加@AlbanoVito,您可能对[清除浏览器缓存](http://stackoverflow.com/a/3902700/1317692)感兴趣. (2认同)