Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 用户日志关闭时间_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Asynchronous_Logoff - Fatal编程技术网

Asp.net 用户日志关闭时间

Asp.net 用户日志关闭时间,asp.net,asp.net-mvc,asp.net-mvc-4,asynchronous,logoff,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Asynchronous,Logoff,我正在开发一个新的Asp.net MVC应用程序,查看已登录的用户对我来说很重要,如果他们的注销时间很短,如果用户单击注销按钮,对我来说就可以了。但大多数情况下,用户通过浏览器浏览出网站或只是关闭浏览器。有没有办法做到这一点。我有一个想法,每两分钟运行一次操作,检查用户是否在那里。但这是个好主意吗?风险是什么。如果是的话,任何人都有一个例子可以证明这一点 您可以使用JavaScript函数onbeforeunload事件。 当用户离开页面导航时,调用此函数 在该函数中,将ajax请求放在服务器上

我正在开发一个新的Asp.net MVC应用程序,查看已登录的用户对我来说很重要,如果他们的注销时间很短,如果用户单击注销按钮,对我来说就可以了。但大多数情况下,用户通过浏览器浏览出网站或只是关闭浏览器。有没有办法做到这一点。我有一个想法,每两分钟运行一次操作,检查用户是否在那里。但这是个好主意吗?风险是什么。如果是的话,任何人都有一个例子可以证明这一点

您可以使用JavaScript函数
onbeforeunload
事件。 当用户离开页面导航时,调用此函数

在该函数中,将ajax请求放在服务器上,此时用户卸载了页面并创建了逻辑

对于多个选项卡或多个设备,解决方案很简单。每个多个选项卡将具有相同的会话,但每个新设备将具有一个新会话,即使用户相同。 为此,可以做的是保存每个会话的最新请求,而不考虑设备。即使用户有多个设备,您的日志也将包含用户每个设备上每个会话的登录时间


希望这有帮助

我两天前在搜索完全相同的东西。我现在的做法如下:

  • 用户登录

    • 我在数据库中保存了一些数据,比如会话密钥和用户id来识别他。我还节省了登录时间和更新的日期时间
    • 我仅在用户已通过身份验证的情况下保存此信息
  • 用户调用操作

    • 我为用户执行的每个操作更新数据库中的日期时间
  • 用户使用注销按钮

    • 我将数据库中的条目从表“session”移动到“sessionHistory”,并将DateTime更新为注销时间
  • 用户关闭浏览器(这是一个棘手的问题)

    • 我用jQuery构建了一小段代码。我每30秒在MVC中调用$.get并戳一次“UpdatePing”操作

    • “UpdatePing”操作将更新数据库中的会话条目。现在我可以看到他的浏览器是否仍然打开

    • 警告:您无法确切知道用户何时关闭选项卡/浏览器。您可以尝试使用事件“beforeunload”,但我不会依赖它(浏览器崩溃等)

  • 删除过期会话

    • 我没有完全删除会话数据。我将会话数据复制到“sessionHistory”表中

  • 谢谢大家的回答,但随着项目规模的扩大,这两个答案可能会变得越来越复杂。例如,我将用移动应用程序支持应用程序。
    我发现最好的解决方案是使用signar将single从客户端发送到服务器,当这些single停止一段时间后,我将自动注销用户

    我已经考虑过这个解决方案,但这里有一个例子,如果用户打开多个选项卡会怎么样。如何确定。对于多个选项卡,将用户收到的最新请求保存到当前会话。是的,我考虑过该解决方案,但如果用户打开多浏览器或在多个设备中打开它会怎么样。我认为这个解决方案会随着项目的扩大而变得复杂。无论如何,非常感谢你的回答。如果你能在下面看到我的评论,看看这是不是一个好主意。我已经编辑/添加了多个选项卡的答案。如果你能看到,我只是在另一个问题中看到你的评论(关于多个标签)。您可以尝试根据ping进行计算。在竞争激烈的环境中,每个会话中的ping都会带来大量开销,特别是当您可以在卸载之前使用一个内置的javascript功能时。甚至ajax control toolkit在用户关闭窗口时只对服务器进行一次ping操作,并保存用户的最新请求,以估计用户离开应用程序的确切时间。这是真的,但如果浏览器未正确关闭,则不会触发AllBeforeUnload。如果这不是很重要,请跳过ping和会话更新,并通过onbeforeunload事件重定向到注销页面。感谢Kampfussel的回复,我非常感谢您的帮助。正如我在下面的评论中所说的,Waqer Ahamed说这会给服务器带来负载,因为我们有相同的问题,所以我建议您也使用Singler.signer,在每个用户的每个间隔之后都会增加很大的开销。除此之外,这将是一个巨大的资源使用。