有人可以让我知道如何区分新登录(新会话)和会话超时。
仅在登录时:用户必须经过身份验证并重定向到servlet才能加载用户详细信息(在其他screnarios用户不能重定向到servlet) 并且超时用户必须重定向到超时页面。
识别新会话(用户未登录):
- 由于会话在超时时间变为空,因此无法使用会话属性。
- 为会话管理设置cookie没有用。 的饼干得到当前会话如何区分新登录(新会话)和会话超时
Cookie cookie = new Cookie("activeSession", null);
cookie.setMaxAge(0);
cookie.setPath("/");
cookie.setValue("");
httpServletResponse.addCookie(cookie);
getCookieValue(httpServletRequest , "activeSession"); returns null
public static String getCookieValue(HttpServletRequest request, String name) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie != null && name.equals(cookie.getName())) {
return cookie.getValue();
}
}
}
return null;
}
注销或超时后删除(会话无效)被创建在用户登录和一个新的会话时。 以前会话中删除的cookie会重新显示预设值。
getCookieValue(httpServletRequest , "activeSession") returns a value;
如果我使用下面的方法,它可以用于第一次登录尝试。 第一次登录会话超时后,筛选器将重定向到超时页面。 用户在超时后在同一窗口中访问应用程序时出现实际问题。
public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException,
{ if ((request instanceof HttpServletRequest)
&& (response instanceof HttpServletResponse)) {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
//Check for a new login
if (httpServletRequest.getSession(false) == null && httpServletRequest.getRequestedSessionId()==null)
{
// Create a new session
httpServletRequest.getSession();
//Redirect to servlet on 1 st login to fetch details from DB
httpRequest.getRequestDispatcher("/loginServlet").forward(request,response);
}else{
//validate active or timedout sessions.
boolean isSessionValid = (httpServletRequest.getRequestedSessionId() != null) && !httpServletRequest.isRequestedSessionIdValid();
if(isSessionValid)
{
httpServletResponse.sendRedirect(getTimeoutPage());
}
}
}
filterChain.doFilter(request, response);
}
因此,详细信息不会从数据库中获取,并且页面加载不正确。
浏览器:IE 8 服务器:Weblogic的服务器