Tomcat 5.5でセッションのタイムアウトをリセットする方法を教えてください。私は定期的にサーバーにajax呼び出しを送信するJavaScript関数を持っています。サーバー側では、これらの呼び出しでセッションの有効期間を更新する必要はありません。Tomcat 5.5でセッションを更新しないようにする
ありがとうございます。
Tomcat 5.5でセッションのタイムアウトをリセットする方法を教えてください。私は定期的にサーバーにajax呼び出しを送信するJavaScript関数を持っています。サーバー側では、これらの呼び出しでセッションの有効期間を更新する必要はありません。Tomcat 5.5でセッションを更新しないようにする
ありがとうございます。
私の最初のアイデアが好きではなかったので、私はこの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>
AJAX呼び出しを行うために別のWebアプリケーション(現在のものと同じ)を作成します。 この2番目のWebアプリケーションでは、セッションの作成を避けることができます。これを行うには、JSPのページディレクティブでsession = "false"を使用するか、サーブレットに明示的にセッションを作成しないでください。これら2つのアプリケーション間でデータを共有する必要がある場合は、コンテキスト定義でcrossContext = "true"という属性を使用できます。 Tomcat Docs
ありがとうございます(+1)、動作する可能性があります。私はしばらく待って、他の答えがあるかどうかを確認します... – a1ex07
私はTomcatでもっと簡単な方法はありません。最後にアクセスした時刻を更新せずにセッションオブジェクトにアクセスする要求を許可するには、Tomcatの内部構造にかなり侵入的な変更を加える必要があります。 –