竹形様
いつもお世話になります。
Java+MySQL+TomcatではじめるWebアプリケーション構築入門P376にありますように、ログアウトする時、
本掲示板でも同様に、ログアウトした後に戻るボタンを押すと履歴をたどることができてしまいますが、何か有効な方法はありますでしょうかご教示おねがいいたします。
いつもお世話になります。
Java+MySQL+TomcatではじめるWebアプリケーション構築入門P376にありますように、ログアウトする時、
session.invalidate();
を実行してセッション変数をクリアしていますが、IEの戻るボタンを押下すると履歴を戻ることができてしまい、セッションをクリアしたはずなのに再度ログインした状態と同じように操作できてしまいまい、履歴を辿ることができないようにすることができません。本掲示板でも同様に、ログアウトした後に戻るボタンを押すと履歴をたどることができてしまいますが、何か有効な方法はありますでしょうかご教示おねがいいたします。
投稿:スワジランド[swajiland]/2009年 04月 02日 17時 28分
/更新:2009年 04月 02日 17時 28分
RE:ログオフした後に戻るボタンで戻れなくする方法について
by 竹形 誠司[takegata]
あー、これはちょっと盲点でしたね。
ブラウザにキャッシュが残らないように、次のようなコードを各ページに入れてみてください。
ブラウザにキャッシュが残らないように、次のようなコードを各ページに入れてみてください。
<%
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
response.addHeader("Cache-Control","no-store");
response.setDateHeader("Expires", 0);
%>
ただ、この方法はブラウザに依存するので、ログアウト後にブラウザを閉じてもらうのが一番確実な方法でしょうね。response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
response.addHeader("Cache-Control","no-store");
response.setDateHeader("Expires", 0);
%>
投稿:竹形 誠司[takegata]/2009年 04月 02日 23時 59分
/更新:2009年 04月 02日 23時 59分
竹形様
いつもお世話になっています。
当方はIE7を使用していますが、
ご指導のスクリプトを各ページの先頭に追加してみましたが、ダメでした。
申し訳ありませんが、スクリプトで履歴を残さないようにする方法は他にありますでしょうか。ご教示おねがいします。
いつもお世話になっています。
当方はIE7を使用していますが、
ご指導のスクリプトを各ページの先頭に追加してみましたが、ダメでした。
申し訳ありませんが、スクリプトで履歴を残さないようにする方法は他にありますでしょうか。ご教示おねがいします。
投稿:スワジランド[swajiland]/2009年 04月 03日 14時 38分
/更新:2009年 04月 03日 14時 39分
当サイトに↑のコードを追加してIE7で以下のような操作をしてみましたが、私の環境ではうまくいっているようです。以下の操作で確認しました。
これでログインしていない状態になりました。上記コードを追加した直後では、ブラウザにキャッシュが残っている可能性がある(リロードしないと新しいコードでページが読み込まれない)ので、キャッシュをクリアした状態でもう一度試してみていただけますか?
ログインする
ログアウトする
ブラウザの戻るボタンを押す
これでログインしていない状態になりました。上記コードを追加した直後では、ブラウザにキャッシュが残っている可能性がある(リロードしないと新しいコードでページが読み込まれない)ので、キャッシュをクリアした状態でもう一度試してみていただけますか?
投稿:竹形 誠司[takegata]/2009年 04月 03日 23時 44分
/更新:2009年 04月 03日 23時 44分
竹形様
お世話になります。
キャッシュをクリアした状態でもう一度試してみてみましたが、ダメでした。
ソースの先頭にご指導いただいたキャッシュクリア、有効期限ゼロを挿入しましたが、ダメでした。
履歴は残っているみたいで、戻るボタンを押せば戻れてしまいます。
このスクリプトでしか履歴を戻れなくする方法はありませんでしょうか。
ご教示おねがいいたします。
お世話になります。
キャッシュをクリアした状態でもう一度試してみてみましたが、ダメでした。
ソースの先頭にご指導いただいたキャッシュクリア、有効期限ゼロを挿入しましたが、ダメでした。
履歴は残っているみたいで、戻るボタンを押せば戻れてしまいます。
このスクリプトでしか履歴を戻れなくする方法はありませんでしょうか。
ご教示おねがいいたします。
投稿:スワジランド[swajiland]/2009年 04月 04日 14時 27分
/更新:2009年 04月 04日 14時 27分
ログインセッションの学習用に簡単なコードを書いてみました。
トップページでは、セッションオブジェクト(user)に文字列が入っているかどうかでログイン状態を判断しています。
Top.jsp
LoginForm.jsp
Login.jsp
Logout.jsp
Top.jspにアクセスすると、最初は「ログインしていません」と表示されます。
ログイン名suzuki、パスワードichiroでログインすると、トップページに「ログイン中です」と表示されます。
【ログアウト】をクリックすると、セッションオブジェクトがクリアされますが、ここでブラウザの「戻る」ボタンをクリックしてトップページに戻るとログアウトしたにもかかわらず「ログイン中です」と表示されてしまいます。これはブラウザに残されたキャッシュの内容が表示されているからです。
そこで、Top.jspを次のように修正します。
Top.jsp
トップページでは、セッションオブジェクト(user)に文字列が入っているかどうかでログイン状態を判断しています。
Top.jsp
<jsp:useBean class="java.lang.StringBuffer" id="user" scope="session"/>
<%if(user.length()==0){%>
ログインしていません。<BR>
<a HREF="LoginForm.jsp">【ログインフォーム】</a>
<%}else{%>
ログイン中です。<BR>
ユーザー名:<%=user.toString()%><BR>
----------------<BR>
ユーザー限定情報<BR>
----------------<BR>
<a HREF="Logout.jsp">【ログアウト】</a>
<%}%>
ログインフォームでは、ログイン名とパスワードをセットしてLogin.jspを呼び出します。<%if(user.length()==0){%>
ログインしていません。<BR>
<a HREF="LoginForm.jsp">【ログインフォーム】</a>
<%}else{%>
ログイン中です。<BR>
ユーザー名:<%=user.toString()%><BR>
----------------<BR>
ユーザー限定情報<BR>
----------------<BR>
<a HREF="Logout.jsp">【ログアウト】</a>
<%}%>
LoginForm.jsp
<FORM ACTION="Login.jsp" METHOD="post">
ログイン名:<INPUT TYPE="text" NAME="login"><BR>
パスワード:<INPUT TYPE="password" NAME="password"><BR>
<INPUT TYPE="submit" VALUE="ログイン">
</FORM>
Login.jspでは、ログイン名とパスワードの照合を行います。普通はデータベースを使いますが、ここではテストのためにハードコーディング(決め打ち)しています。ログイン名が「suzuki」、パスワードが「ichiro」のときにセッションオブジェクト(user)にユーザー名を登録します。ログイン名:<INPUT TYPE="text" NAME="login"><BR>
パスワード:<INPUT TYPE="password" NAME="password"><BR>
<INPUT TYPE="submit" VALUE="ログイン">
</FORM>
Login.jsp
<jsp:useBean class="java.lang.StringBuffer" id="user" scope="session"/>
<%
String strLogin = request.getParameter("login");
String strPassword = request.getParameter("password");
if(strLogin.equals("suzuki") && strPassword.equals("ichiro")){
user.append("鈴木一朗");
}
%>
<%if(user.length()!=0){%>
ログインしました。<BR>
<a HREF="Top.jsp">【トップページ】</a>
<%}else{%>
ログイン名またはパスワードが違います。
<INPUT TYPE="button"VALUE="戻る" ONCLOCK="history.back()">
<%}%>
ログアウトはセッションを無効にするだけです。この処理でセッションオブジェクトは初期状態になります。<%
String strLogin = request.getParameter("login");
String strPassword = request.getParameter("password");
if(strLogin.equals("suzuki") && strPassword.equals("ichiro")){
user.append("鈴木一朗");
}
%>
<%if(user.length()!=0){%>
ログインしました。<BR>
<a HREF="Top.jsp">【トップページ】</a>
<%}else{%>
ログイン名またはパスワードが違います。
<INPUT TYPE="button"VALUE="戻る" ONCLOCK="history.back()">
<%}%>
Logout.jsp
<%
session.invalidate();
%>
ログアウトしました。<BR>
<a HREF="Top.jsp">【トップページ】</a>
session.invalidate();
%>
ログアウトしました。<BR>
<a HREF="Top.jsp">【トップページ】</a>
Top.jspにアクセスすると、最初は「ログインしていません」と表示されます。
ログイン名suzuki、パスワードichiroでログインすると、トップページに「ログイン中です」と表示されます。
【ログアウト】をクリックすると、セッションオブジェクトがクリアされますが、ここでブラウザの「戻る」ボタンをクリックしてトップページに戻るとログアウトしたにもかかわらず「ログイン中です」と表示されてしまいます。これはブラウザに残されたキャッシュの内容が表示されているからです。
そこで、Top.jspを次のように修正します。
Top.jsp
<jsp:useBean class="java.lang.StringBuffer" id="user" scope="session"/>
<%
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
response.addHeader("Cache-Control","no-store");
response.setDateHeader("Expires", 0);
%>
<%if(user.length()==0){%>
ログインしていません。<BR>
<a HREF="LoginForm.jsp">【ログインフォーム】</a>
<%}else{%>
ログイン中です。<BR>
ユーザー名:<%=user.toString()%><BR>
----------------<BR>
ユーザー限定情報<BR>
----------------<BR>
<a HREF="Logout.jsp">【ログアウト】</a>
<%}%>
これにより、Top.jspのキャッシュがブラウザに残らなくなるため、ログアウト後にブラウザの「戻る」ボタンをクリックするとTop.jspから内容を読み直して「ログインしていません」と表示されるようになるはずです。<%
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
response.addHeader("Cache-Control","no-store");
response.setDateHeader("Expires", 0);
%>
<%if(user.length()==0){%>
ログインしていません。<BR>
<a HREF="LoginForm.jsp">【ログインフォーム】</a>
<%}else{%>
ログイン中です。<BR>
ユーザー名:<%=user.toString()%><BR>
----------------<BR>
ユーザー限定情報<BR>
----------------<BR>
<a HREF="Logout.jsp">【ログアウト】</a>
<%}%>
投稿:竹形 誠司[takegata]/2009年 04月 05日 13時 40分
/更新:2009年 04月 06日 09時 02分
竹形様
どうもありがとうございました。
いつもご丁寧に指導いただきまして感謝申し上げます。
戻るボタンを押しても今度は戻りませんでした。最高です!
P375に記載されているように、セッションが無効になっていると、セッション変数を取得した場合例外エラーになることを利用してログイン画面に強制的に遷移させるようにしました。
本当にありがとうございました。
どうもありがとうございました。
いつもご丁寧に指導いただきまして感謝申し上げます。
戻るボタンを押しても今度は戻りませんでした。最高です!
P375に記載されているように、セッションが無効になっていると、セッション変数を取得した場合例外エラーになることを利用してログイン画面に強制的に遷移させるようにしました。
本当にありがとうございました。
投稿:スワジランド[swajiland]/2009年 04月 05日 23時 52分
/更新:2009年 04月 05日 23時 53分