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

时间:2014-01-29 12:55:04

标签: c# javascript asp.net

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

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

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

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

3 个答案:

答案 0 :(得分:0)

也许你可以使用你的global.asax文件中的Session_End在会话过期时删除用户。虽然我不能100%确定你是否可以通过这种方法获得会话ID。它可能在EventArgs ...

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

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

答案 1 :(得分:0)

用户无法从不同的浏览器多次登录这一点很重要吗?

如果没有,更常见的方法是将登录信息变量存储在会话变量中(可能是登录时间,用户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操作,每隔几秒左右(多少取决于您希望浏览器关闭多长时间再次登录才能再次登录)
  • 当服务器收到某个用户的ping时,请在会话变量中标记日期和时间。
  • 如果浏览器试图以任何方式访问网页,请首先检查会话以及上次ping完成的时间。如果会话为空,或者时间大于ping * 2之间的时间(或类似的时间),则用户可以再次登录(发送到登录页面)。如果时间较短,请检查用户是否已登录。如果是,请继续。如果没有,告诉他必须从第一个连接(或任何你想要的)注销。

希望这有帮助!

答案 2 :(得分:0)

使用signalR的最佳方式。您可以跟踪用户是在线还是离线。即使是处置,您也可以跟踪确切的注销或浏览器关闭。

希望这会教会你一些新的东西。请参阅下面的链接,了解signalR的一个简单示例。

signalR sample application for online, offline status