11

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

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

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

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

しかし、これも機能していません。これを修正するにはどうすればよいですか?

4

9 に答える 9

18

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

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);
  }
}
于 2013-01-21T12:04:35.630 に答える
9

このコードは、戻るボタンを制御する必要がある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を「login」に置き換えます。したがって、ページのURLで「ログイン」を変更することをお勧めします。

この方法の利点:-

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

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

于 2016-06-13T09:17:02.903 に答える
6

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

<META Http-Equiv="Cache-Control" Content="no-cache">
<META Http-Equiv="Pragma" Content="no-cache">
<META Http-Equiv="Expires" Content="0">
于 2013-01-21T12:17:55.757 に答える
3

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

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public class HomeController  : Controller
{
}
于 2014-05-27T13:19:12.103 に答える
1
 <script language="JavaScript" type="text/javascript">
    window.history.forward();              
 </script> 
于 2016-06-06T09:20:28.680 に答える
0

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

このソリューションは、IE11およびChromeバージョン43.0.2357.130mで機能しました。

お役に立てれば。

于 2015-07-04T05:15:10.847 に答える
0
var url = window.history.forward();
window.history.go(-window.history.length);
于 2017-08-24T08:42:52.107 に答える
0

すべてのページでこれが必要な場合は、Global.asaxに次のように記述できます。

protected void Application_BeginRequest()
{
Response.AddHeader("Cache-Control", "no-cache, no-store, must-revalidate");
Response.AddHeader("Pragma", "no-cache");
Response.AddHeader("Expires", "0");
}

これにより、サイトのページはキャッシュされません。

于 2020-02-20T17:12:25.323 に答える
-1

このコードは、マスターページの読み込みイベントで使用してください。

if(!IsPostBack)
        {
            if (Session["LoginId"] == null)
                Response.Redirect("frmLogin.aspx");
            else
            {
                Response.ClearHeaders();
                Response.AddHeader("Cache-Control", "no-cache, no-store, max-age=0, must-revalidate");
                Response.AddHeader("Pragma", "no-cache");
                            }
        }

それが役に立てば幸い!:)

于 2013-10-11T05:12:04.397 に答える