特定のリクエストに対してTomcat5.5でセッションタイムアウトのリセットを無効にするにはどうすればよいですか?ページには、定期的にajax呼び出しをサーバーに送信するjavascript関数があります。サーバー側では、これらの呼び出しでセッションの有効期間が更新されないようにします。
ありがとうございました。
さて、あなたは私の最初のアイデアが気に入らなかったので、私はこの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ドキュメント