documentation;サーブレットコンテナがこのセッションを無効化する前に
setMaxInactiveInterval(int型の間隔)は
クライアント要求間の時間を秒単位で指定します。
したがってsetMaxInactiveInterval
の方法は、セッションを無効にします。
ロックされたページをユーザーに表示するには、2つの方法があります。
まず、時間がオーバー lockedpageそうでない場合はリセット時にリダイレクトされている場合
フィルタを使用してセッション時間をチェックします。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpSession session = ((HttpServletRequest) request).getSession(false);
if (session == null) {
// ((HttpServletRequest) request).getSession(true);
// redirect to logout or anywhere you want, to create a session
return;
}
// Check if filter also work for sessionlocked.jsp
if (((HttpServletRequest) request).getRequestURL().toString().contains("sessionlocked")) {
chain.doFilter(request, response); // no need to check sessionlocked
return;
}
long lastAccessTime = session.getLastAccessedTime();
long tenMinuteAsMilisecond = 10 * 60 * 1000;
if (lastAccessTime + tenMinuteAsMilisecond > (new Date()).getTime()) {
chain.doFilter(request, response); // session still not locked
} else {
((HttpServletResponse) response).sendRedirect("sessionlocked.jsp");
}
}
セカンド(最初に加えて最初の試みは、サーバ側で制御されるため)。
JavaScriptを使用してカウントダウンし、時間が経過したら、ロックされたページ にリダイレクトします。
window.onload = function() {
setInterval(function() {
window.location.replace("/sessionlocked.jsp");
}, 600000);
}
のみサーブレットが必要な場合は、 (サーブレットとのユーザーの対話)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(false);
if (session == null) {
request.getSession(true);
// redirect to logout or anywhere you want, to create a session
return;
}
long lastAccessTime = session.getLastAccessedTime();
long tenMinuteAsMilisecond = 10 * 1000;// to test lock time set to 10 seconds
if (lastAccessTime + tenMinuteAsMilisecond > (new Date()).getTime()) {
response.getOutputStream().print("Session not locked" + i++);
// TODO for not locked code
} else {
response.getOutputStream().print("Session locked");
//redirect to sessionlocked.jsp
}
}
サーブレット出力(ロック時間は10秒に設定)。
セッションが期限切れになった場合(getSession()は新しいものを提供します)、フィルタの試行は機能しません。 JSの試行では、クライアントが同じセッションで複数のページ(タブ/ウィンドウ)を開いているときに奇妙な結果が得られます。セッションがサーバー側で期限切れになったときにユーザーをすぐにリダイレクトするという要件に対する正しいアプローチはどちらもありません。 – BalusC
@BalusC私はまだ答えを編集していると推測し、コードの上記のコメントを追加する、私は答えが-1ポイントに値しないと思う、それはちょっとした行動です:) –
答えは現在のフォームに間違っています。もちろん、解決策の代わりに回避策が提案された場合、具体的な要件を実際に解決して解決し、すべての可能性のある警告を記述するように投稿が修正されれば、ダウンボートは削除されます。 – BalusC