在Firefox和Chrome中的ASP.Net(C#)中的会话

时间:2012-04-26 10:34:14

标签: asp.net session firefox google-chrome logout

我想问一下注销后丢失的会话:

我编写了代码,但它只能在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>

3 个答案:

答案 0 :(得分: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对于一个浏览器来说已经足够了,但对于所有浏览器来说还不够。此外,使用SSL更好,因为这些页面可能会在路上被代理缓存...

答案 1 :(得分:1)

您需要在Page_init()事件上检查用户会话。如果会话为空,则将用户重定向到登录页面。因此,如果您当时注销并尝试单击后退按钮,则系统会将用户重定向到不在该用户帐户上的登录页面。

这是您需要检查用户会话的事件,

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

希望这会对你有所帮助。 谢谢。

答案 2 :(得分:0)

你可以使用ajax或iframe保持你的会话活着 这是一个简单的例子:keep session alive with iframe