1

ログアウト後に失われたセッションについてお聞きしたいです。

コードを書きましたが、Internet Explorer でのみ動作し、Mozilla Firefox や Google Chrome では動作しません。これらのブラウザの両方で、戻るボタンをクリックするとログアウトした後、ユーザーのアカウントに戻ります。

ログアウトページのコード (ページ読み込み時)-

FormsAuthentication.SignOut();
Session.Abandon();
Session["CustomerId"] = null;
FormsAuthentication.RedirectToLoginPage();

他のすべてのページまたはマスターページで-

Response.Cache.SetCacheability(HttpCacheability.NoCache);
if (Session["CustomerId"] == null)
{
    Response.Redirect("~/Login.aspx");
}

web-configファイルで-

<authentication mode="Forms">
   <forms name="MyCookie" loginUrl="Login.aspx" protection="All" timeout="90"    slidingExpiration="true"></forms>
</authentication>
4

3 に答える 3

3

ログアウトしてもユーザー情報が表示される場合は、ブラウザーのキャッシュに気を配っていないため、ページがブラウザーにキャッシュされません。

ブラウザのキャッシュに残しておきたくないすべてのページに対して、次のように設定する必要があります。

CurrentPage.Response.Cache.SetExpires(DateTime.UtcNow.AddYears(-4));
CurrentPage.Response.Cache.SetValidUntilExpires(false);
CurrentPage.Response.Cache.SetCacheability(HttpCacheability.NoCache);
CurrentPage.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
CurrentPage.Response.Cache.SetNoStore();
CurrentPage.Response.ExpiresAbsolute = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0));
CurrentPage.Response.Expires = 0;
CurrentPage.Response.CacheControl = "no-cache";
CurrentPage.Response.AppendHeader("Pragma", "no-cache");
CurrentPage.Response.Cache.AppendCacheExtension("must-revalidate, proxy-revalidate, post-check=0, pre-check=0");

IEがデータを保持せず、もう一方がデータを保持する理由は、各ブラウザーが動作するように選択したか、設定したセットアップのためです。ここでのポイントは、このデータをブラウザーのキャッシュに保持したくない場合は、制御を行い、ブラウザーに既定の設定を使用させないようにする必要があるということです。

また、HttpCacheability.NoCache だけでも 1 つのブラウザーには十分かもしれませんが、すべてのブラウザーには十分ではありません。また、このページは道路上のプロキシによってキャッシュされる可能性があるため、SSL を使用することをお勧めします...

于 2012-04-26T10:58:01.697 に答える
1

Page_init() イベントでユーザー セッションを確認する必要があります。セッションが空の場合、ユーザーをログイン ページにリダイレクトします。そのため、ログアウトして [戻る] ボタンをクリックしようとすると、システムはユーザーをそのユーザー アカウントではなくログイン ページにリダイレクトします。

これは、ユーザー セッションを確認する必要があるイベントです。

    protected void Page_init(object sender, EventArgs e)
    {
        if (Session["User"] == null)
        {
            Response.Redirect("Login.aspx");
        }
    }

これがあなたを助けることを願っています。ありがとうございました。

于 2012-04-26T13:27:38.510 に答える
0

また、ajax または iframe を使用してセッションを維持できます。
簡単な例を次に示します。iframe でセッションを維持します。

于 2012-04-26T13:47:24.027 に答える