用户在 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.ClearSession.RemoveAll 相同;后者只调用前者。他们立即删除存储在会话中的所有项目,但会话本身仍然存在。 Session_OnEnd 不会触发。

Session.Abandon 实际上并没有立即清除这些值,它只是将会话标记为在当前请求结束时被放弃。您可以继续读取其余请求的值。如果您稍后在请求中写入会话,则新值将在请求结束时悄悄丢弃,不会发出警告。 Session_OnEnd 在请求结束时触发,而不是在调用 Abandon 时触发。

【讨论】:

【参考方案2】:

浏览器可以在本地缓存内容。所以无论你在服务器上做什么,在登出后,如果用户点击返回按钮,浏览器可以决定从本地缓存中获取最后一页并显示出来。

为了防止这种行为,您可以在禁用缓存的情况下提供所有需要身份验证的控制器操作。这可以通过用custom [NoCache] filter 装饰它们来实现。此过滤器将确保在提供需要身份验证的操作时设置正确的响应标头,以防止浏览器缓存它们。

话虽如此,请注意 Session.Abandon(); 调用应该在您的服务器上完成 - 在您的注销控制器操作中,该操作应该清除身份验证 cookie 和会话状态。

【讨论】:

以上是关于用户在 ASP .NET MVC 5 中注销时如何清除所有会话元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何让任何视图知道用户角色(ASP.NET MVC 身份)已更改,以强制任何用户在浏览时注销?

Asp.net MVC 5 视图在使用 F5 重新加载页面之前不呈现

关闭浏览器 ASP.NET MVC 后如何注销用户

ASP.NET MVC 注销和返回按钮

在 ASP.NET 中注销时如何杀死用户的会话

Asp.Net MVC 2中会话超时时的确认