用户在 ASP .NET MVC 5 中注销时如何清除所有会话元素?
Posted
技术标签:
【中文标题】用户在 ASP .NET MVC 5 中注销时如何清除所有会话元素?【英文标题】:How clear all session elements when user log out in ASP .NET MVC 5? 【发布时间】:2017-05-27 06:41:08 【问题描述】:我遵循以下代码:
function My_Function()
var x;
if (confirm("Exit?") == true)
x = "Ok";
window.location.href = '@Url.Action("Login", "Account")';
Session.Abandon();
else
x = "Cancel";
我要防止的是,注销后,然后我点击返回导航按钮,我不想回到上一页。
【问题讨论】:
最好不要使用会话,而是使用 FormsAuthentication 或其他替代方法。 【参考方案1】:Session.Clear
和 Session.RemoveAll
相同;后者只调用前者。他们立即删除存储在会话中的所有项目,但会话本身仍然存在。 Session_OnEnd 不会触发。
Session.Abandon
实际上并没有立即清除这些值,它只是将会话标记为在当前请求结束时被放弃。您可以继续读取其余请求的值。如果您稍后在请求中写入会话,则新值将在请求结束时悄悄丢弃,不会发出警告。 Session_OnEnd
在请求结束时触发,而不是在调用 Abandon 时触发。
【讨论】:
【参考方案2】:浏览器可以在本地缓存内容。所以无论你在服务器上做什么,在登出后,如果用户点击返回按钮,浏览器可以决定从本地缓存中获取最后一页并显示出来。
为了防止这种行为,您可以在禁用缓存的情况下提供所有需要身份验证的控制器操作。这可以通过用custom [NoCache] filter
装饰它们来实现。此过滤器将确保在提供需要身份验证的操作时设置正确的响应标头,以防止浏览器缓存它们。
话虽如此,请注意 Session.Abandon();
调用应该在您的服务器上完成 - 在您的注销控制器操作中,该操作应该清除身份验证 cookie 和会话状态。
【讨论】:
以上是关于用户在 ASP .NET MVC 5 中注销时如何清除所有会话元素?的主要内容,如果未能解决你的问题,请参考以下文章
如何让任何视图知道用户角色(ASP.NET MVC 身份)已更改,以强制任何用户在浏览时注销?