ブラウザのバックボタン機能の使用を禁止するにはどうすればいいですか?


ここでは、ブラウザのバックボタンを使って、それぞれの長所と短所を分析します。
一、概要
かつて多くの人が「ブラウザの後退ボタンを無効にするにはどうすればいいですか?」ユーザーが後退ボタンを押して前に見たページに戻るのを防ぐにはどうすればいいですか?ASPフォーラムでは、この問題も一番多くの問題の一つです。残念なことに、答えはとても簡単です。ブラウザの後退ボタンを無効にすることはできません。
最初はブラウザの後退ボタンを無効にしたい人がいるというのが不思議でした。その後、この後退ボタンを無効にしたいという人が多いことを見て、ほっとしました。デフォルトでは、ユーザーがフォームを提出した後、フォームページに戻ることができるからです。再び編集し、表一方向データベースに新しいレコードを挿入するように提出します。これは私たちが見たくないものです。
そこで、このようなことが起こらないようにする方法を探すことにしました。多くのサイトを訪れ、これらのサイトで紹介されている様々な実現方法を参考にしました。ASPプログラミングサイトをよく訪問すると、ここで紹介した内容の一部はすでに見たことがあるかもしれません。本論文の課題は、様々な可能な方法を紹介し、最善の方法を見つけることです。
二、キャッシュ禁止
私が見つけた多くの案の中には、ページキャッシュの禁止を提案しています。具体的にはサーバー側のスクリプトを使用して、以下のようになります。

<% 

Response.Buffer = True 

Response.ExpiresAbsolute = Now() - 1 

Response.Expires = 0 

Response.CacheControl = "no-cache" 

%> 
この方法は非常に効果的です。これは、バッファからページを読み込むのではなく、ブラウザに強制的に再アクセスします。この方法を使用すると、プログラム者の主な任務はセッションレベルの変数を作成することであり、この変数を通じてユーザーが依然としてバックボタンでアクセスできないページを確認することができるかどうかを決定します。ブラウザがこのページをキャッシュしないため、ユーザーが後退ボタンをクリックするとブラウザがこのページを再ダウンロードします。この時、プログラムはそのセッション変数を確認して、ユーザーがこのページを開くことができるかどうかを確認します。
例えば、下記のフォームがあると仮定します。

<% 

Response.Buffer = True 
Response.ExpiresAbsolute = Now() - 1 
Response.Expires = 0 
Response.CacheControl = "no-cache" 
If Len(Session("FirstTimeToPage")) > 0 then 
&single;            ,         。 
&single;       ,           。 
Session("FirstTimeToPage") = "" 
Response.Redirect "/Bar.asp" 
Response.End 
End If 
&single;          ,             
&single;          
%> 
<form method=post action="SomePage.asp"> 
<input type=submit> 
</form> 

私たちはセッション変数FirstTimeToPageを用いて、ユーザが現在のページに初めてアクセスするかどうかを確認する。初めてでない場合は、セッション変数の値をクリアして、ユーザをスタートページにリダイレクトします。このように、フォームが提出された場合(このとき、SompePage.aspが開かれる)は、FirstTimeToPageに値を与えなければならない。つまり、SomePage.aspには以下のコードを追加する必要があります。
Session(「FirstTimeToPage」)=「NO」
このように、すでにSomePage.aspを開いているユーザが、後退ボタンをクリックすると、ブラウザはサーバにページのダウンロードを再要求し、サーバはSession(「FirstTimeToPage」)に値が含まれていることを確認し、Session(「FirstTimeToPage」)をクリアし、ユーザーを他のページにリダイレクトする。もちろん、これらすべてのユーザがCookieを有効にする必要があります。そうでなければ、セッション変数は無効になります。この問題についてもっと説明します。For session variables to work、must the Web visitor have cookies enabledを参照してください。)
また、Webページをクライアントコードでキャッシュしなくすることもできます。

<html> 
<head> 
<meta http-equiv="Expires" CONTENT="0"> 
<meta http-equiv="Cache-Control" CONTENT="no-cache"> 
<meta http-equiv="Pragma" CONTENT="no-cache"> 
</head> 
上記の方法でWebページをキャッシュしないように強制すると、以下の点に注意しなければなりません。セキュリティ接続を使用する場合にのみ、「Pragma:no-cache」がブラウザキャッシュページを防ぐことができます。セキュリティ保護されていないページについては、「Pragma:no-cache」は「Expires:-1」と同じものとみなされますが、ブラウザはまだページをキャッシュしていますが、ページは即時期限切れとしてマークされています。IE 4または5において、「Cache-Coontrol」META HTTP-EQUIDタグは無視され、機能しません。
実際の応用では、これらのコードを全部加えることができます。しかし、この方法はすべてのブラウザに適用できないので、推奨されない。しかし、インターネット環境下では、管理者がどのブラウザを使うかをコントロールできます。この方法を使う人もいると思います。
三、その他の方法
これから検討する方法は、ブラウザキャッシュではなくボタン自体を中心とします。ここにRewiring the Back Buttonという文章がありますが、とても参考になります。しかし、このような方法を使えば、ユーザーが後退ボタンをクリックしても、以前にデータを入力したページは見られないですが、二回クリックすればいいです。これは私たちの希望の効果ではないです。
もう一つのバックボタンを無効にする方法は、クライアントJavaScriptでツールバーのないウィンドウを開くことで、ユーザは前のページに戻りにくいが、不可能ではない。より安全ですが、かなり悩ましい方法は、フォームが提出されたときに新しいウィンドウを開き、フォームがあるウィンドウを閉じます。しかし、この方法は真剣に考える価値がないと思います。私たちはいつもユーザーにフォームを提出するごとに新しいウィンドウを開くことができないからです。
では、私たちはユーザーに返させたくないページでもJavaScriptコードに加入できますか?このページに組み込まれているJavaScriptコードは、前進ボタンをクリックする効果をもたらし、ユーザーが後退ボタンをクリックした時に生じる動作を相殺します。この機能を実現するためのJavaScriptコードは以下の通りです。

<script language="JavaScript"> 
<!-- 
javascript:window.history.forward(1); 
//--> 
</script> 
同様に、この方法は効果的であるが、「最良の方法」からはまだ遠く離れている。その後、私はlocations.replaceを使って一つのページから別のページに移動することを提案する人を見ました。この方法の原理は、現在の履歴を新しいページのURLで置き換えることであり、このように履歴を閲覧すると1ページだけになり、後退ボタンは永遠に利用可能になることはない。これは多くの人が探している方法だと思いますが、この方法はまだどんな場合でも一番いい方法ではありません。この方法を使用する例を以下に示す。

<A HREF="PageName.htm" onclick="javascript:location.replace(this.href); event.returnValue=false; ">           </A>
 
このページへのリンクの後退を禁止します。
この方法の欠点は、Reponse.Redirectを簡単に使うともはや有効ではないということです。これは、ユーザがページから別のページに移るたびに、クライアントコードでlocation.historyをクリアしなければならないからです。また、この方法がクリアされたのは最後の訪問履歴であり、全てではないことに注意してください。
のアクセス履歴です
上のリンクをクリックして簡単なHTMLページを開きます。後退ボタンを押してください。この時開いているのはこのページではなく、このページの前のページです。もちろん、ブラウザでクライアントJavaScriptコードを有効にしてください。)
  
       よく探してみましたが、やはりブラウザの後退ボタンを完全に無効にする方法は見つけられませんでした。ここで紹介した方法はすべて異なった程度で、異なる方法でユーザーが前のページに戻ることを禁止することができますが、それぞれに制限があります。後退ボタンを完全に無効にする方法がないので、クライアントスクリプトとサーバエンドスクリプトを混合して運用するのが一番いいと思います。