ユーザーがブラウザの戻るボタンを使用してログアウトすると前のページに移動するためのソリューションを探しています。
Asp.netにWebアプリケーションを構築し、認証と承認にカスタムメンバーシッププロバイダーを使用しています。ユーザーがログアウトリンクをクリックしてアプリケーションからログアウトし、デフォルトのカバーページにリダイレクトされる場合を除き、すべて正常に機能します。ブラウザの[戻る]ボタンをクリックすると、実際には以前の場所に戻り、データは引き続き表示されます。
もちろん、そのページでは何もできません。ログインページに再度リダイレクトされるリンクをクリックします。しかし、これらの情報を表示することは、多くのユーザーを混乱させます。
ブラウザの履歴をクリアして使用できないようにする方法があるか、または戻るボタンをクリックしてログインページにリダイレクトする方法があるかどうか疑問に思っています。
ありがとう
ブラウザの履歴と戻るボタンを心配すると、頭痛や性器いぼができます。この問題を処理するための機能が組み込まれています。
ログアウトリンク/ボタンは、このコードを含むページを、必要なものと一緒に指す必要があります。
[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();
}
コードはこれに由来します page そして有効ですが、ページは目に見えません。
バックボタンの動作に関する適切な質問/回答は こちら にあります。
更新:
私がマシューと話している会話に従って、機密または揮発性の個々のページのキャッシュを無効にするには、次のようなコードを使用します。
Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
私と同じように機能するかどうか知りたいです。
Javascriptを使用して、戻るボタンを無効にすることができます(通常は、ユーザーを別のページに転送するページに送信し、[戻る]をクリックすると再び転送されるようにします)。永続的なユーザーは、履歴を2ステップ戻してループをステップオーバーできます。
そのページはブラウザのキャッシュにあります。ブラウザに何もキャッシュしないように依頼することもできますが、これによりパフォーマンスが劇的に低下する場合があるため、お勧めしません。
このコードは非常に便利です
Response.Cache.SetCacheability(HttpCacheability.NoCache);
このコードは、ロードイベント、マスターページの場合にのみ配置しますが、IEでのみ動作します。IEおよび使用したFirefox
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
これを回避するには、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();
最善の回避策は、マスターページに次のコードを配置することです。ページのキャッシュを回避し、ログアウト後にユーザーがアクセスできないようにします。
追伸:次のコードは、さまざまなソースからのコンパイルです。ここに投稿して、解決策を探している人が誰でも役に立つと思うように
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>
それが役立つ場合は、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