注销 MVC 4 时清除会话
Clear session on Logout MVC 4
我需要知道如何在 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();
Clear cookies
set session to Null on Logout etc
但是当我点击浏览器的后退按钮时。它重定向到同一个帐户。
请帮助我,单击注销按钮时如何清除会话变量。
我一个一个地尝试了上面的每一个,然后分组但结果相同。
当您点击浏览器后退按钮时,它会从缓存中获取页面,而不是从服务器中获取页面。但是用户将无法在后退按钮后显示的页面上执行任何操作。
如果您仍然希望页面不显示,您应该删除缓存。这是一个最佳实践。这是代码。 (写入Global.asax.cs文件)
protected void Application_BeginRequest()
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
}
编写此代码后,用户将不会在按下后退按钮后看到上一页。
上面写的把Session对象搞清楚的代码是对的。无需更改任何内容。
当用户单击后退按钮时,浏览器会显示页面的缓存版本,这正是用户首次下载该页面时所看到的。但是,根本没有与服务器联系来显示该页面的缓存版本。页面的缓存版本看起来与下载时完全一样,因此您可以看到下载页面时登录的用户。但是,这并不意味着用户仍处于登录状态。
如果您想避免用户导航回之前的缓存页面,更简单的方法是在用户注销时删除浏览器的历史记录。您不能直接这样做,但是有一种解决方法可以提供相同的结果。 运行 这个 JavaScript:
var Backlen=history.length; history.go(-Backlen);
window.location.href='new page url';
因此,您需要做的是 return 带有此 JavaScript 的页面,并且,在您阅读 'new page url'
的地方,您必须插入要重定向的页面用户注销时。
当然,避免缓存是一种选择,就像 Ravinder Singh 的回答一样,但避免浏览器缓存所有页面并不是一个好主意。
我需要知道如何在 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();
Clear cookies
set session to Null on Logout etc
但是当我点击浏览器的后退按钮时。它重定向到同一个帐户。 请帮助我,单击注销按钮时如何清除会话变量。 我一个一个地尝试了上面的每一个,然后分组但结果相同。
当您点击浏览器后退按钮时,它会从缓存中获取页面,而不是从服务器中获取页面。但是用户将无法在后退按钮后显示的页面上执行任何操作。
如果您仍然希望页面不显示,您应该删除缓存。这是一个最佳实践。这是代码。 (写入Global.asax.cs文件)
protected void Application_BeginRequest()
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
}
编写此代码后,用户将不会在按下后退按钮后看到上一页。
上面写的把Session对象搞清楚的代码是对的。无需更改任何内容。
当用户单击后退按钮时,浏览器会显示页面的缓存版本,这正是用户首次下载该页面时所看到的。但是,根本没有与服务器联系来显示该页面的缓存版本。页面的缓存版本看起来与下载时完全一样,因此您可以看到下载页面时登录的用户。但是,这并不意味着用户仍处于登录状态。
如果您想避免用户导航回之前的缓存页面,更简单的方法是在用户注销时删除浏览器的历史记录。您不能直接这样做,但是有一种解决方法可以提供相同的结果。 运行 这个 JavaScript:
var Backlen=history.length; history.go(-Backlen);
window.location.href='new page url';
因此,您需要做的是 return 带有此 JavaScript 的页面,并且,在您阅读 'new page url'
的地方,您必须插入要重定向的页面用户注销时。
当然,避免缓存是一种选择,就像 Ravinder Singh 的回答一样,但避免浏览器缓存所有页面并不是一个好主意。