竹形誠司 ブログ
ご質問    »トピック一覧
掲示板へのスパムが多いため、「ご質問」のコーナーはユーザー登録制とさせていただきました。お手数ですが、上の「新規ユーザーの登録」メニューより登録をお願いします。
帳票Web
アプリケーション

受注開発始めました
詳しくは こちら
竹形 誠司 著/ラトルズ刊
JSP帳票アプリケーション実践開発入門
JSP帳票アプリケーション
実践開発入門

JSP業務アプリケーション短期開発入門
JSP業務アプリケーション
短期開発入門

Java+MySQL+Tomcatで始めるWebアプリケーション構築入門
Java+MySQL+Tomcatで始めるWebアプリケーション構築入門

Java+MySQL+Tomcatで作る掲示板とブログ
Java+MySQL+Tomcatで作る
掲示板とブログ
ログオフした後に戻るボタンで戻れなくする方法について
by スワジランド[swajiland]
竹形様

いつもお世話になります。
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);
%>
ただ、この方法はブラウザに依存するので、ログアウト後にブラウザを閉じてもらうのが一番確実な方法でしょうね。
投稿:竹形 誠司[takegata]/2009年 04月 02日 23時 59分 /更新:2009年 04月 02日 23時 59分
RE:ログオフした後に戻るボタンで戻れなくする方法について
by スワジランド[swajiland]
竹形様

いつもお世話になっています。
当方はIE7を使用していますが、
ご指導のスクリプトを各ページの先頭に追加してみましたが、ダメでした。
申し訳ありませんが、スクリプトで履歴を残さないようにする方法は他にありますでしょうか。ご教示おねがいします。


投稿:スワジランド[swajiland]/2009年 04月 03日 14時 38分 /更新:2009年 04月 03日 14時 39分
RE:ログオフした後に戻るボタンで戻れなくする方法について
by 竹形 誠司[takegata]
当サイトに↑のコードを追加してIE7で以下のような操作をしてみましたが、私の環境ではうまくいっているようです。以下の操作で確認しました。

ログインする
ログアウトする
ブラウザの戻るボタンを押す

これでログインしていない状態になりました。上記コードを追加した直後では、ブラウザにキャッシュが残っている可能性がある(リロードしないと新しいコードでページが読み込まれない)ので、キャッシュをクリアした状態でもう一度試してみていただけますか?
投稿:竹形 誠司[takegata]/2009年 04月 03日 23時 44分 /更新:2009年 04月 03日 23時 44分
RE:ログオフした後に戻るボタンで戻れなくする方法について
by スワジランド[swajiland]
竹形様

お世話になります。
キャッシュをクリアした状態でもう一度試してみてみましたが、ダメでした。
ソースの先頭にご指導いただいたキャッシュクリア、有効期限ゼロを挿入しましたが、ダメでした。
履歴は残っているみたいで、戻るボタンを押せば戻れてしまいます。
このスクリプトでしか履歴を戻れなくする方法はありませんでしょうか。
ご教示おねがいいたします。

投稿:スワジランド[swajiland]/2009年 04月 04日 14時 27分 /更新:2009年 04月 04日 14時 27分
RE:ログオフした後に戻るボタンで戻れなくする方法について
by 竹形 誠司[takegata]
ログインセッションの学習用に簡単なコードを書いてみました。

トップページでは、セッションオブジェクト(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を呼び出します。
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)にユーザー名を登録します。
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()">
<%}%>
ログアウトはセッションを無効にするだけです。この処理でセッションオブジェクトは初期状態になります。
Logout.jsp
<%
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から内容を読み直して「ログインしていません」と表示されるようになるはずです。
投稿:竹形 誠司[takegata]/2009年 04月 05日 13時 40分 /更新:2009年 04月 06日 09時 02分
RE:ログオフした後に戻るボタンで戻れなくする方法について
by スワジランド[swajiland]
竹形様

どうもありがとうございました。
いつもご丁寧に指導いただきまして感謝申し上げます。
戻るボタンを押しても今度は戻りませんでした。最高です!
P375に記載されているように、セッションが無効になっていると、セッション変数を取得した場合例外エラーになることを利用してログイン画面に強制的に遷移させるようにしました。
本当にありがとうございました。

投稿:スワジランド[swajiland]/2009年 04月 05日 23時 52分 /更新:2009年 04月 05日 23時 53分