0

以下は私のコードです。

この場合、「非アクティブ状態が 0 秒続くとタイムアウト」と言っているため、セッションはすぐにタイムアウトします。

したがって、session.getAttribute("foo")は例外を与える必要があります。しかし、セッションがまったくタイムアウトしなかったかのように、コードは問題なく動作します。

 public void doGet(HttpServletRequest request, HttpServletResponse response)
                                                           throws IOException {
         response.setContentType(“text/html”);
         PrintWriter out = response.getWriter();
         HttpSession session = request.getSession();
         session.setAttribute(“foo”, “42”);
         session.setMaxInactiveInterval(0);
         String foo = (String) session.getAttribute(“foo”);
         if (session.isNew()) {
            out.println(“This is a new session.”); 
          } else {
            out.println(“Welcome back!”);
        }
        out.println(“Foo: “ + foo);
 }

getMaxInactiveInterval()を使用する場合も同様の問題があります。

最初にsetMaxInactiveInterval()を明示的に呼び出すと、正しい結果が得られます。ただし、プログラムで設定されていない場合、getMaxInactiveIntervalはデフォルトのセッション タイムアウト (30 分) を表示しません。代わりに、結果として常に60 秒が返されます。

私のサーバーはApache Tomcat 7です。助けてくれてありがとう

4

2 に答える 2

3

Tomcat は、バックグラウンド スレッドを使用してセッションを期限切れにします。デフォルトでは、スレッドは 1 分に 1 回だけセッションの有効期限をチェックします。

getMaxInactiveInterval()デフォルトの 1800 (30 分) が返されない場合は、どこかでデフォルトが変更されています。

于 2013-10-25T11:26:51.203 に答える