我需要知道如何在MVC 4
asp.net
中清除退出会话
我几乎尝试了所有的事情,但都是徒劳的。
[AllowAnonymous]
public ActionResult SignOut()
{
Response.AddHeader("Cache-Control", "no-cache, no-store,must-revalidate");
Response.AddHeader("Pragma", "no-cache");
Response.AddHeader("Expires", "0");
Session.Abandon();
Session.Clear();
Response.Cookies.Clear();
Session.RemoveAll();
Session["Login"] = null;
return RedirectToAction("Index", "Login");
}
Session.Clear();
Session.Abandon();
清除cookie在注销等时将会话设置为Null
但是当我点击浏览器的后退按钮时。它重定向到同一个帐户。 请帮帮我,当我点击退出按钮时,我将如何清除会话变量。 我逐一尝试了以上各项,然后分组但结果相同。
答案 0 :(得分:2)
当用户点击后退按钮时,浏览器会显示页面的缓存版本,这正是用户首次下载该页面时所看到的内容。但是,根本没有与服务器联系以显示该页面的缓存版本。页面的缓存版本与下载时完全一样,因此您可以看到下载页面时登录的用户。但是,这并不意味着用户仍然登录。
如果您想避免用户导航回以前的缓存页面,更简单的方法是在用户注销时删除浏览器的历史记录。你无法直接做到这一点,但有一种解决方法可以提供相同的结果。运行此JavaScript:
var Backlen=history.length; history.go(-Backlen);
window.location.href='new page url';
所以,你需要做的是返回一个包含这个JavaScript的页面,并且在你阅读'new page url'
的地方,你必须在你注销时将页面插入你要重定向的页面。
当然,避免缓存,就像在Ravinder Singh的回答中一样,但是避免浏览器缓存所有页面并不是一个好主意。
答案 1 :(得分:1)
当您单击浏览器后退按钮时,它会从缓存中提取页面而不是来自服务器。但是用户将无法在后退按钮后显示的页面上执行任何操作。
如果您仍然希望不显示页面,则应删除缓存。这是一种最佳实践。这是代码。 (写在Global.asax.cs文件中)
protected void Application_BeginRequest()
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
}
编写此代码后,按下后退按钮后用户将无法看到上一页。
上面编写的使Session对象清晰的代码是正确的。无需改变任何事情。