我需要显示用户登录时间详细信息。我有两个表。一个是UserMaster,其中包含UserDetails,另一个是UserLogInTimeDetails包含两列UserId和LogedInTime。 用户登录UserId和LogInTime存储在UserLogInTimeDetails中时。 用户注销时我从UserLogInTimeDetails中删除该特定用户的行。
但问题是如果用户关闭浏览器,那么用户的详细信息未从UserLogInTimeDetails表中删除。该用户将无法再次登录。
如何解决这个问题? 我用google搜索并看到浏览器关闭事件无法处理,并且在许多地方他们建议使用onbeforeunload事件,这对我不起作用。
请帮忙。我遇到了大麻烦。
答案 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"];
编辑: 如果用户必须多次登录很重要,那么您需要解决更大的问题。 也许这样的事情可能是解决方案吗?
希望这有帮助!
答案 2 :(得分:0)
使用signalR的最佳方式。您可以跟踪用户是在线还是离线。即使是处置,您也可以跟踪确切的注销或浏览器关闭。
希望这会教会你一些新的东西。请参阅下面的链接,了解signalR的一个简单示例。