Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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
C# 显示登录用户时间详细信息_C#_Javascript_Asp.net - Fatal编程技术网

C# 显示登录用户时间详细信息

C# 显示登录用户时间详细信息,c#,javascript,asp.net,C#,Javascript,Asp.net,我需要显示用户登录时间的详细信息。我有两个表。一个是UserMaster,其中包含UserDetails,另一个是UserLogInTimeDetails,其中包含两列UserId和LogedTime。 当用户登录时,UserId和LogInTime存储在UserLogInTimeDetails中。 当用户注销时,我正在从UserLogInTimeDetails中删除该特定用户的行 但问题是,如果用户关闭浏览器,则中用户的详细信息不会从UserLogInTimeDetails表中删除。该用户将无

我需要显示用户登录时间的详细信息。我有两个表。一个是UserMaster,其中包含UserDetails,另一个是UserLogInTimeDetails,其中包含两列UserId和LogedTime。 当用户登录时,UserId和LogInTime存储在UserLogInTimeDetails中。 当用户注销时,我正在从UserLogInTimeDetails中删除该特定用户的行

但问题是,如果用户关闭浏览器,则中用户的详细信息不会从UserLogInTimeDetails表中删除。该用户将无法再次登录

如何解决这个问题? 我在谷歌上看到浏览器关闭事件无法处理,在许多地方,他们建议使用onbeforeunload事件,这对我不起作用


请帮忙。我遇到了大麻烦。

也许您可以使用global.asax文件中的Session\u End在用户会话过期时删除该用户。尽管我不能100%确定是否可以从这个方法中获取会话ID。它可能在事件参数中

void Session_End(Object sender, EventArgs e) {
    //Remove user from database here
}

否则,另一种存储数据的方法是基于上次活动,因此每次用户提交请求时,您都会更新上次活动的时间。您甚至可以将其与会话ID一起存储在数据库中,以及它们的登录时间,然后能够计算该会话从登录时间到最后一次活动的活动持续时间

用户不能从不同浏览器多次登录是否重要

如果没有,更常见的方法是将登录信息变量存储在会话变量中(可能是登录时间、用户id或类似的内容),并使用它来验证用户是否已登录

如果用户关闭浏览器,会话将丢失,他必须再次登录,但他可以从不同的浏览器登录任意次数

您可以通过以下方式访问这些变量:

// Set it like this. Can be any type of object with login data.
Session["LoginData"] = "Hello";

// Get it like this.
string test = (string)Session["LoginData"];
编辑: 如果用户必须多次登录是很重要的,那么您有一个更大的问题需要解决。 也许像这样的事情可以解决问题

  • 让浏览器(通过ajax)每隔几秒钟左右以某种方式ping一次web服务器(多少次取决于您希望浏览器关闭多长时间才能再次登录,而不是流量)
  • 当服务器收到来自某个用户的ping时,在会话变量中标记日期和时间
  • 如果浏览器试图以任何方式访问网页,首先,检查会话以及上次ping的完成时间。如果会话为空,或者时间超过ping*2之间的时间(或类似的时间),用户可以再次登录(发送到登录页面)。如果时间较短,请检查用户是否已登录。如果他是,继续。如果没有,告诉他必须从第一个连接(或者你想要的任何连接)注销

希望这有帮助

使用信号器执行此操作的最佳方式。您可以跟踪用户在线或离线。甚至基于dispose,您也可以跟踪准确的注销或浏览器关闭

希望这能教会你一些新的东西。有关信号器的简单示例,请参阅下面的链接


您能粘贴代码吗。到目前为止你都做了些什么?这是一个经典的问题,也许你最好的方法是做一些LastActivity,并在它结束的时候不要在标题中包含标签!!如果有任何答案对你有帮助,请接受其中一个。Stackoverflow建立在用户信誉的基础上,这使得所有问题的答案都更准确。=)没有一个用户一次只能登录一次好的,我很抱歉,但是由于今天的web不是一个来回流动的数据流(如TCP/IP连接),我相信很难实现这一点。服务器将不知道用户何时关闭浏览器。user3193557:我已编辑了一种方法的注释,用户只需登录一次。