我想问一下注销后丢失的会话:
我编写了代码,但它只能在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>
答案 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