2017-06-28 3 views
0

私は以下のように出力を取得しておくのです:ブラウザを閉じた後にセッションがクリアされないのはなぜですか?

Inside AuthenticationFilter.. 
Inside Session! 

ブラウザを閉じた後にセッションがクリアされ得ていないのはなぜ?私もindex.jspの中のページsession=falseをキープしましたが、まだ動作していません..誰かが以下のコードを見て、ブラウザウィンドウを閉じた後にセッションをクリアするのを助けてください。以下

コードである:

index.jspを

<%@ page session="false" %> 
<% 

/* ServletContext context= getServletContext(); 
RequestDispatcher rd= context.getRequestDispatcher("/login"); 
rd.forward(request, response); */ 

response.sendRedirect("login"); 

%> 

がloginservlet

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

/** 
* Login servlet. 
*/ 

@WebServlet("/login") 
public final class LoginServlet extends HttpServlet { 

    private HttpSession session = null; 
    private RequestDispatcher rd = null; 

    /** 
    * Respond to a GET request for the content produced by 
    * this servlet. 
    * 
    * @param request The servlet request we are processing 
    * @param response The servlet response we are producing 
    * 
    * @exception IOException if an input/output error occurs 
    * @exception ServletException if a servlet error occurs 
    */ 
    @Override 
    public void doGet(HttpServletRequest request, 
         HttpServletResponse response) 
     throws IOException, ServletException { 

     System.out.println("Inside Login Servlet..."); 

     PrintWriter out = response.getWriter(); 
     out.print("<h3> This is login servlet poage ... </h3>"); 

    } 
} 

AuthenticationServlet

import java.io.IOException; 

import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.annotation.WebFilter; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 


@WebFilter("/*") 
public class AuthenticationFilter implements Filter{ 

    private HttpSession session = null; 

    public void init(FilterConfig arg0) throws ServletException {} 

    public void doFilter(ServletRequest req, ServletResponse resp, 
     FilterChain chain) throws IOException, ServletException { 

     System.out.println("Inside AuthenticationFilter.."); 

     HttpServletRequest request = (HttpServletRequest) req; 
     HttpServletResponse response = (HttpServletResponse)resp; 

     session = request.getSession(false); 
     if(session != null && !session.isNew()) { 
      System.out.println("Inside Session!"); 
     } else { 
      getAccessToken(request, response, chain); 
      chain.doFilter(request, response); 
     } 

    } 

    public void destroy() {} 

    private void getAccessToken(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException { 

     session = request.getSession(); 
     System.out.println("Created new Session!"); 
    } 

} 
+0

誰でも上記の問題についてアドバイスをお願いします。 – Hari

答えて

0

ブラウザはセッション変数をクリアできません。彼らは$ _SESSIONに直接アクセスすることはできません。彼らは、セッションIDクッキーを消去して、まったく新しい空のセッションを提供するか、サーバー側のコードが$ _SESSIONを空にしなければなりません。

+0

しかし、セッション終了後にセッションクッキーをクリアする必要がありますか? – Hari

0

セッションタイムアウトはweb.xmlで指定されています。ブラウザを閉じても、セッションは有効になります。 あなたが本当にそれを終了する必要がある場合は、ブラウザが閉じられたサーバ側であるときは、検出できないonbeforeunload方法と

session.invalidate(); 
0

を呼び出すJavaScriptを使用して要求を行います。これを行うには、ブラウザを閉じるためにJavaScriptを書く必要があります。その後、サーバーにそのユーザーのセッションを無効にするリクエストを行います。session.invalidate()

0

このコードでは5分後にセッションが無効になります。

session.setMaxInactiveInterval(300); // 300 seconds 

ブラウザのイベントを検出するなし、サーバー側のソリューションはありません。

ブラウザの終了を検出する必要がある場合は、thisスレッドを参照してクライアント側のソリューションを確認してください。

関連する問題