新しいログイン(新しいセッション)とセッションのタイムアウトを区別する方法を教えてもらえますか?
ユーザーのみが認証され、サーブレットにリダイレクトされてユーザーの詳細をロードする必要があります(他の状況では、ユーザーはサーブレットにリダイレクトしないでください)。 およびオンタイムアウトユーザーをタイムアウトページにリダイレクトする必要があります。
新しいセッション(ログインしていないユーザー)を識別するには
- タイムアウト時にセッションがnullになるため、セッション属性を使用できません。
- セッション管理の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;
以下のアプローチを使用すると、1回目のログイン試行に使用できます。 最初のログインセッションがタイムアウトした後、フィルタはタイムアウトページにリダイレクトされます。 ユーザーがタイムアウト後に同じウィンドウでアプリケーションにアクセスすると、実際の問題が発生します。
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);
}
したがって、詳細はDBから取得されず、ページが正しく読み込まれません。
ブラウザ:IE 8 サーバー:WebLogic Serverの