【问题标题】:MVC manage sessionMVC 管理会话
【发布时间】:2016-04-15 19:14:18
【问题描述】:

我正在使用 MVC 应用程序来管理身份验证。我遇到的问题是 chrome,因为它实际上从未终止会话,因为它在默认关闭后在后台运行。我不想强制所有最终用户更改此设置,因为那样它将杀死环聊等。所以我想知道我是否可以使用任何标准的 web.config 设置来处理这个问题,或者我是否需要进行 ajax 轮询间隔继续更新cookie过期时间?

【问题讨论】:

  • 我不知道你在问什么
  • 我想知道,使用 MVC 如何在浏览器关闭时自动终止用户会话。即在用户关闭浏览器时注销用户
  • 您自己管理 cookie 吗?如果是这样,您需要将 cookie 的过期时间设置为 DateTime.MinValue,这会有效地创建会话 cookie。这意味着当浏览器关闭时,cookie 会被删除,即使 Chrome 仍有任务在后台运行。

标签: asp.net asp.net-mvc security asp.net-mvc-4


【解决方案1】:

ASP.NET 会话由 2 个组件组成:客户端 http 会话 cookie 和服务器的会话存储提供程序。假设用户的 SessionId 为 1。如果您从服务器中删除会话 1,则用户返回并使用 SessionId 1 创建一个新会话。如果用户删除会话 cookie,服务器将继续运行会话 1。

您的要求通常不可能。当用户退出您的站点或浏览器时,您无法强制他们向您的服务器发送请求。 javascript beforeUnload 事件在某些情况下允许您在某些情况下向/sign-off 发送请求。明显的限制是没有网络访问 = 没有消息。

孤立会话的标准解决方案是使用会话清理策略来清理它们。一些开发人员选择使用持久存储来完全消除清理,这样购物车就永远不会消失。

唯一可以实现目标的合理解决方案(仍然是矫枉过正)。您使用 SingalR 将用户持久连接到服务器并从服务器 ping 他们。如果连接无法响应,您将放弃会话。这将是一个脆弱的过程,如果您不能非常确定用户是否已断开连接,您将收到大量来自用户的支持电话,他们想知道为什么他们在手机上浏览您的网站时会不断退出。

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 2012-04-30
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多