gpt4 book ai didi

c# - "Logging out"用户关闭浏览器事件

转载 作者:行者123 更新时间:2023-11-30 13:25:42 25 4
gpt4 key购买 nike

我有一个名为 Eventlog 的表,该表已经包含有关用户连接的数据:例如,当用户调用此操作时:

public ActionResult Login(string username, string password)
{

}
  • 我测试用户是否已经存在于数据库中

  • 如果是,我使用 Session["user"] = usernameFormsAuthentication.SetAuthCookie(username, true); 设置用户 session

  • 然后我在事件日志表上记录了一条记录:用户 X 在 Y 点连接

这很好用,但我还需要有关用户注销的信息。我可以做与注销操作类似的事情,我想它也能正常工作,但大多数人不使用注销按钮,他们只关闭浏览器,如何实现用户注销事件用户关闭浏览器时的这种情况:用户 X 已在 Y 点断开连接。 Session_End() 不能满足这种情况下的需要。

最佳答案

您必须接受网络技术的局限性。一旦您将响应发送给用户代理,服务器就无法知道请求发生了什么。用户可能会优雅地关闭用户代理。 UA 可能会崩溃。用户可能会失去互联网连接。他的电脑可能会崩溃。所有这一切都可能发生在客户端甚至收到响应之前。这就是您正在处理的环境。拥抱它而不是与之抗争。

如果跟踪注销对您很重要,您可以使用以下几种技术:

  1. 依赖 session 超时。如果您选择的超时时间足够短,则可能足以满足您的安全要求。我认为这是首选方式,因为它简单且经过验证。
  2. 使用脚本从 UA 向服务器发送心跳。您可以使用“ping”请求、长时间调用等。但是,请注意随之而来的性能影响、对服务器的请求数量以及实现的复杂性。
  3. 使用 SignalR 等现有框架建立客户端到服务器的连接,并让客户端 checkin 服务器。这基本上是第二种选择,您的手动工作更少。

所有这些都不会让您拦截用户注销或连接丢失,但如果客户端停止响应,您就知道连接已中断(以多种可能的方式之一)。因此,您不应将其注册为“用户已注销”,而应注册为“用户已断开连接”。

关于c# - "Logging out"用户关闭浏览器事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42002389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com