Ter*_*rry 6 java servlets httprequest
我正在开发Java Servlets.在检查用户是否已登录时,我想检查HTTP请求是否具有有效会话.为了检查,我有两种可能性:
(1)
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(false);
if (session != null) {
// user is logged in
...
}
}
Run Code Online (Sandbox Code Playgroud)
因为我将false作为参数传递,所以如果没有有效会话已经存在,则没有创建新会话,并且该函数返回null,我可以检查.
或者我这样做:
(2)
if (request.isRequestedSessionIdValid()) {
// user is logged in
...
}
Run Code Online (Sandbox Code Playgroud)
有什么区别,有什么优势/劣势吗?或者这两个功能或多或少相同?
ssk*_*ssk 10
形成Javadoc
isRequestedSessionIdValid boolean isRequestedSessionIdValid()检查请求的会话ID是否仍然有效.如果客户端未指定任何会话ID,则此方法返回false.
返回:如果此请求在当前会话上下文中具有有效会话的id,则返回true; 否则是假的
所以在意义上两者都是一样的.但是你需要注意的是,只有在第一次请求容器时,request.getSession(false)才会为null.在第一个请求容器创建会话并发送Jsessionid cookie以及响应之后,它可以跟踪来自同一浏览器的后续请求.因此,在您的情况下,不应检查会话是否为空,您应该存储会话属性"is_logged_in"= true,并且如果session不为null,则检查此属性.