29

ログアウトしたら、ブラウザの戻るボタンを使用して前のページに移動するための解決策を探しています。

asp.netにWebアプリケーションをビルドし、認証と承認にカスタムメンバーシッププロバイダーを使用しています。ユーザーがログアウトリンクをクリックしてアプリケーションからログアウトし、デフォルトのカバーページにリダイレクトされる場合を除いて、すべて正常に機能します。ブラウザの[戻る]ボタンをクリックすると、実際には以前の場所に戻り、データは引き続き表示されます。

もちろん、そのページでは何もできません。ログインページにリダイレクトされるリンクをクリックしてください。しかし、これらの情報を表示すると、多くのユーザーが混乱します。

ブラウザの履歴をクリアして使用を元に戻せない方法、または戻るボタンをクリックしてログインページにリダイレクトする方法があるかどうか疑問に思っています。

ありがとう

4

7 に答える 7

23

ブラウザの履歴と戻るボタンを心配すると、頭痛や性器いぼができます。この問題を処理するための機能が組み込まれています。

ログアウトリンク/ボタンは、このコードを含むページと、その他の必要なものを指している必要があります。

[vb.net]

Imports System.Web.Security

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
 Handles MyBase.Load
    Session.Abandon()
    FormsAuthentication.SignOut()
End Sub

[c#]

using System.Web.Security;

private void Page_Load(object sender, System.EventArgs e)
{
    // Put user code to initialize the page here
    Session.Abandon();
    FormsAuthentication.SignOut();
}

コードはこのページからのものであり、有効ですが、ページは見づらいです。

バックボタンの動作に関する良い質問/回答はここにあります。

アップデート:

Matthewとの会話に従って、機密性の高い、または揮発性のある個々のページのキャッシュを無効にするには、次のようなコードを使用します。

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();

それが私と同じようにあなたのために働くかどうか知りたいです。

于 2010-04-21T22:25:52.383 に答える
3

javascriptを使用して、戻るボタンを無効にすることができます(通常、ユーザーを別のページに転送するページに移動して、戻るをクリックすると再び転送されます)。永続的なユーザーは、履歴を2ステップ戻し、ループをステップオーバーできます。

そのページはブラウザのキャッシュにあります。ブラウザに何もキャッシュしないように要求することはできますが、これによりパフォーマンスが低下し、場合によっては劇的に低下するため、お勧めしません。

于 2010-04-21T22:27:49.693 に答える
1

このコードは非常に便利です

Response.Cache.SetCacheability(HttpCacheability.NoCache);

このコードは、ロードイベント、場合によってはマスターページにのみ配置しますが、IEでのみ機能し、IEとFirefoxで使用しました。

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
于 2012-08-22T16:40:36.010 に答える
1

あなたの答え

これに対する回避策は、logout.aspxページのセクションに次のjavascriptコードを追加することです。

<script type="text/javascript">
 window.history.forward(1);
</script>

このjavascriptコードは、ユーザーが戻るボタンを押してログアウトページにアクセスした場合に、ユーザーを転送します。

ユーザーがログアウトした後にページに戻れないようにする必要がある場合は、すべてのページに次のようなコードを含めて、どのページもキャッシュしないようにブラウザーに要求する必要があります。

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); 
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 
于 2013-12-10T07:14:11.417 に答える
0

役立つ場合は、HttpResponse.Cacheプロパティを使用してみてください。

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(false);
Response.Cache.VaryByParams["Category"] = true;

if (Response.Cache.VaryByParams["Category"])
{
//…
}

または、HttpResponse.CacheControlを使用してページのキャッシュを完全にブロックすることもできますが、上記のCacheプロパティを優先して非推奨になりました。

Response.CacheControl = “No-Cache”;

または、あなたは本当に気が狂って、それをすべて手作業で行うことができます:

Response.ClearHeaders();
Response.AppendHeader(“Cache-Control”, “no-cache”); //HTTP 1.1
Response.AppendHeader(“Cache-Control”, “private”); // HTTP 1.1
Response.AppendHeader(“Cache-Control”, “no-store”); // HTTP 1.1
Response.AppendHeader(“Cache-Control”, “must-revalidate”); // HTTP 1.1
Response.AppendHeader(“Cache-Control”, “max-stale=0″); // HTTP 1.1
Response.AppendHeader(“Cache-Control”, “post-check=0″); // HTTP 1.1
Response.AppendHeader(“Cache-Control”, “pre-check=0″); // HTTP 1.1
Response.AppendHeader(“Pragma”, “no-cache”); // HTTP 1.1
Response.AppendHeader(“Keep-Alive”, “timeout=3, max=993″); // HTTP 1.1
Response.AppendHeader(“Expires”, “Mon, 26 Jul 1997 05:00:00 GMT”); // HTTP 1.1

参照

于 2010-12-08T12:09:38.553 に答える
0

最善の回避策は、マスターページに次のコードを配置することです。ページのキャッシュを回避し、ユーザーがログアウト後にページにアクセスできないようにします。

PS:以下のコードは、さまざまなソースからのコンパイルです。ここに投稿して、解決策を探している人は誰でもそれが役立つと思うかもしれません

Master.cs

protected void Page_Load(object sender, EventArgs e)
    {
        Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetNoStore(); 

    }

Master.aspx

<a href="logout.aspx">Logout</span></a>

logout.cs

protected void Timer1_Tick(object sender, EventArgs e)
        {
            Session.Clear();
            Session.Abandon();


 Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetNoStore();

        try
        {
            Session.Abandon();
            FormsAuthentication.SignOut();
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.Buffer = true;
            Response.ExpiresAbsolute = DateTime.Now.AddDays(-1d);
            Response.Expires = -1000;
            Response.CacheControl = "no-cache";
            //Response.Redirect("login.aspx", true);
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
        Response.Redirect("Signin.aspx");
    }

logout.aspx

<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" Text="Loggin Out Please Wait" runat="server" />
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="Timer1_Tick">
            </asp:Timer>
        </ContentTemplate>
    </asp:UpdatePanel>
</div>

</div>
</form>
于 2018-07-09T12:26:52.967 に答える
-3

実際に解決策を見つけたので、マスターページのページ読み込みメソッドに次のスニペットを追加しました。

Page.Response.Cache.SetCacheability(HttpCacheability.NoCache);

とにかく返信ありがとうございます:)

于 2010-04-21T22:30:06.913 に答える