2012-05-05 10 views
3

Tomcat 5.5でセッションのタイムアウトをリセットする方法を教えてください。私は定期的にサーバーにajax呼び出しを送信するJavaScript関数を持っています。サーバー側では、これらの呼び出しでセッションの有効期間を更新する必要はありません。Tomcat 5.5でセッションを更新しないようにする

ありがとうございます。

答えて

3

私の最初のアイデアが好きではなかったので、私はこのJSPデモンストレーションを思いついた。 ハックのようですが、うまくいきます。テストするには、コピーして貼り付けます。 最初のJSPを参照します。セッションを開始し、非アクティブ間隔を設定します。 リダイレクトされたら、ブラウザの[更新]ボタンを押し続けます。 2回目のJSPを何回要求しても、現在のセッションは終了します。

test1.jsp

<% 
    session.setMaxInactiveInterval(20); //for easy testing 
    response.sendRedirect("test2.jsp"); 
%> 

に、test2.jspあなたの答えのための

<%@ page session="false" import="java.util.*" %> 
<% 
    HttpSession session = request.getSession(false); 
    if(session == null){ 
        out.print("Error, No Session!"); 
        return; 
    } 
    long creationTime = session.getCreationTime(); 
    long now = new Date().getTime(); 
    long lastAccessedTime = session.getLastAccessedTime(); 
    int oldInterval = session.getMaxInactiveInterval(); 
    int inactivePeriod = (int)(now - lastAccessedTime)/1000; 
    session.setMaxInactiveInterval(oldInterval - inactivePeriod); 
    int newInterval = session.getMaxInactiveInterval(); 
%> 
<html> 
<body> 
session id is <%=session.getId()%> 
<br/><%=creationTime%> = creationTime 
<br/><%=lastAccessedTime%> = lastAccessedTime 
<br/><%=now%> = now 
<br/><%=oldInterval%> = oldInterval in seconds 
<br/><%=inactivePeriod%> = inactivePeriod 
<br/><%=newInterval%> = newInterval in seconds 
</body> 
</html> 
+0

ありがとうございます(+1)、動作する可能性があります。私はしばらく待って、他の答えがあるかどうかを確認します... – a1ex07

+0

私はTomcatでもっと簡単な方法はありません。最後にアクセスした時刻を更新せずにセッションオブジェクトにアクセスする要求を許可するには、Tomcatの内部構造にかなり侵入的な変更を加える必要があります。 –

0

AJAX呼び出しを行うために別のWebアプリケーション(現在のものと同じ)を作成します。 この2番目のWebアプリケーションでは、セッションの作成を避けることができます。これを行うには、JSPのページディレクティブでsession = "false"を使用するか、サーブレットに明示的にセッションを作成しないでください。これら2つのアプリケーション間でデータを共有する必要がある場合は、コンテキスト定義でcrossContext = "true"という属性を使用できます。 Tomcat Docs

+0

おかげで、それは(少なくとも現時点では)私のためのオプションではありません。かなり古いシステムで作業しなければならず、リファクタリングに時間がかかりすぎる可能性があります。また、ハンドラでセッションデータが必要ですが、セッションを更新したくない場合(セッションが期限切れの場合、ハンドラは別の結果を返します) – a1ex07

+0

AJAXハンドラのコードを記述したいだけですか?他に何もない? – rickz

+1

はい。しかし、問題は、ハンドラがセッションの存続期間を延ばさずにセッションデータにアクセスする必要があることです。 – a1ex07