0

ブラウザの戻るボタンの問題を解決するのを手伝ってくれる人はいますか? ユーザーがブラウザの履歴リストから任意のページを選択すると、サーバー側の処理を実行したいと考えています。たとえば、アプリケーションからログアウトしたとき、戻るボタンをクリックしたときに、彼がアクセスした前のページを表示したくありません。私のプロジェクトでは、ページを一貫した状態にするために更新アクションが必要な他のページがいくつかあります。

この問題を解決するために、コードから Cookie を追加し、Cookie の値を false に設定しようとしました。Javascript を使用して、その Cookie の値を確認しています。false の場合は、ページをリロードする他に何もしません。その後、その Cookie を true に変更しています。しかし、Cookie の値を変更しているときに、既存の Cookie を更新したいのですが、新しい Cookie を挿入しています。

これは私が使用しているクッキーを変更するスクリプトです

document.cookie= c_name+ "=" + c_value;
               //c_name- CookieName ; c_value-Cookie value;

これは正しい解決策ですか?または、より良い解決策はありますか?

前もって感謝します。

4

2 に答える 2

3

うまくいけば、私はあなたの質問を正しく理解しています。あなたは実際にあなたのページをキャッシュすることから戻るボタンを無効にしようとしていますか?

その場合、ブラウザがそのページをキャッシュしないように、次のhttpヘッダーを追加する必要があります。

Cache-Control: no-cache, max-age=0, must-revalidate, no-store

また、サイトログインの処理に関しては、Cookieの代わりにSessionsを使用することを検討することをお勧めします。サーバー上にいくつかのセッション変数を作成するだけで、ユーザーID、アクティブなセッションIDなどを保存できます。ページが読み込まれると、そのセッション値をチェックして有効かどうかを確認し、種類を決定できるようにします。ページコンテンツの数はクライアント側で表示する必要があります。

于 2012-11-22T04:36:44.727 に答える
1

まず、私を助けてくれてありがとう。

最後に、これに対する解決策を得ました。そして、これは簡単な解決策です

まず、ページの render メソッドをオーバーライドし、その中に以下のコードを記述します。

//ブラウザの戻るボタンの問題を回避するために Cookie を挿入する

if (Request.Cookies["loadedFromServer"] != null)
Response.Cookies.Set(Request.Cookies["loadedFromServer"]);
else
Response.Cookies.Set(new HttpCookie("loadedFromServer", ""));

Response.Cookies["loadedFromServer"].Value = "true";

そして、マスターページに次のスクリプトを記述します。

function ClearCookie() {
var CACHE_COOKIE = 'loadedFromServer';
var loadedFromServer = getCookie(CACHE_COOKIE) == 'true';
if (loadedFromServer.toString() == "false") {
location.reload();
}
document.cookie = CACHE_COOKIE + '=' + getCookie(CACHE_COOKIE) + '; expires=Thu, 01 Jan                            1970 00:00:01 UTC; path=/;';
}

function getCookie(c_name) {
var i, x, y, ARRcookies = document.cookie.split(";");
for (i = 0; i < ARRcookies.length; i++) {
x = (ARRcookies[i].substr(0, ARRcookies[i].indexOf("="))).trim();
y = (ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1)).trim();
x = x.replace(/^\s+|\s+$/g, "");
 if (x == c_name) {
return unescape(y);
}
}
 }

毎回マスターページでその関数を呼び出します。

于 2012-11-28T03:53:04.593 に答える