web-dev-qa-db-ja.com

mvc3.netでログアウトした後にのみブラウザの戻るボタンを無効にする方法

ユーザーログインにFormsAuthenticationを使用しています。ユーザーがブラウザからページを表示できるように戻るボタンが正常にログアウトした後、問題が発生します。 JavaScriptを使ってみた

 <script type = "text/javascript" >
        function preventBack() { window.history.forward(1); }
        setTimeout("preventBack()", 0);
        window.onunload = function () { null };
</script>

しかし、戻るボタンは完全に無効になっています。これはbtで機能しました。ユーザーがログインしているときに戻るボタンの機能を無効にしたくありません。ログインしたユーザーに通常どおりブラウザーの戻るボタンを使用してもらいたいです。ただし、いったんログアウトすることを選択すると、[戻る]を押してコンテンツを表示することはできなくなります。私も使ってみました

Session.Abandon();
 Response.Cache.SetCacheability(HttpCacheability.NoCache);
 Response.Cache.SetExpires(DateTime.Now);

しかし、これも機能していません。どうすれば修正できますか?

9
S.p

ユーザーがログアウトしたときにブラウザーの履歴をクリアできます。

var url = window.location.href;
window.history.go(-window.history.length);
window.location.href = url;

ただし、これは特に堅牢ではありません。JavaScriptに依存しているため、複数のタブでは機能せず、ユーザーを困らせるだけです。 IMOの最善策は、ブラウザが適切に適用されたNoCacheAttributeを介して「ログイン」ページをキャッシュしないように、適切なキャッシュヘッダーを設定することです。

public class NoCacheAttribute : ActionFilterAttribute
{  
  public override void OnResultExecuting(ResultExecutingContext filterContext)
  {
      filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
      filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
      filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
      filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
      filterContext.HttpContext.Response.Cache.SetNoStore();

      base.OnResultExecuting(filterContext);
  }
}
17
Rich O'Kelly

このコードは、[戻る]ボタンを制御する必要があるHTMLページで使用します。

$().ready(function() {
    if(document.referrer != 'http://localhost:8181/'){ 
        history.pushState(null, null, 'login');
        window.addEventListener('popstate', function () {
            history.pushState(null, null, 'login');
        });
    }
});

このコードは、戻るボタンイベントをブロックします。 if条件は、前のページが ' http:// localhost:8181 / 'の場合に戻るボタンを許可するためのものです。前のページが ' http:// localhost:8181 / 'でない場合、[戻る]ボタンは機能しません。以前のすべてのページをブロックする必要がある場合は、if条件を回避してください。 history.pushStateステートメントは、ブラウザーのアドレスバーのURLを「ログイン」に置き換えます。そのため、ページのURLで「ログイン」を変更することをお勧めします。

この方法の利点:-

  1. キャッシュを制御する必要はありません。
  2. 指定した前のページに戻るボタンイベントを許可し、残りをブロックすることができます。

私の答えが誰かを助けることを願っています。

7
Arjun Ajith

戻るボタンを無効にすることは、ニーズを達成するための正しい方法ではありません。代わりに、次の3つのタグをhtmlファイルに追加できます。これにより、キャッシュがクリアされます。

<META Http-Equiv="Cache-Control" Content="no-cache">
<META Http-Equiv="Pragma" Content="no-cache">
<META Http-Equiv="Expires" Content="0">
5
surendran

私が見つけた最も簡単な方法は OutputCache Attribute を使用することです

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public class HomeController  : Controller
{
}
3
Ashwini Verma
 <script language="JavaScript" type="text/javascript">
    window.history.forward();              
 </script> 
1
shafi7468

記事 http://www.aspdotnet-suresh.com/2011/11/disable-browser-back-button.html に目を通してください。 Webサイトのすべての訪問者に特定のページへのアクセスを提供する必要があるため、作成者がレイアウトページで提供したjavacript関数を使用して、戻るボタンの問題を回避しました。

このソリューションは、IE 11およびChromeバージョン43.0.2357.130 mで動作しました。

お役に立てれば。

0
alj
var url = window.history.forward();
window.history.go(-window.history.length);
0
Poornachander K