2014-01-29 84 views
0

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

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

如何解决这个问题? 我google了,看到浏览器关闭事件不可能处理,并在很多地方他们建议使用onbeforeunload事件,这是不适合我的工作。

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

+0

请问您可以粘贴代码。到目前为止你做了什么? –

+0

这是一个经典的问题,可能你最好的办法是拥有某种LastActivity,并把它定时出来 – Liath

+0

不要在标题中加入标签! –

回答

0

也许你可以在你的global.asax文件中使用Session_End来使它工作,以在用户的​​会话过期时删除用户。尽管我不能100%确定您是否可以通过此方法获取会话ID。这可能是EventArgs的内...

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

否则,存储数据的另一种方式是根据过去的活动,所以每次用户提交更新最后一次活动的时间的请求。你甚至可以在数据库中存储一个会话ID以及它们的登录时间,然后能够计算该会话从登录时间到最后一个活动的活动持续时间;

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"]; 

编辑: 如果用户必须登录NOG多次重要的是,你必须解决一个更大的问题。 也许这样的东西可能是解决方案?

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

希望这有助于!

+0

没有一个用户每次只能登录一次 – user3193557

+0

好的,我非常抱歉,但由于今天的网络并不是一个数据流(如在TCP/IP连接中),我相信它这很难实现。服务器不知道用户关闭浏览器的时间。 – einord

+0

user3193557:我编辑了用户必须仅登录一次的方法的注释。 – einord

0

最好的方法去与此使用signalR。您可以跟踪用户在线或离线。基于即使处置你也可以跟踪确切的注销或浏览器。

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

signalR sample application for online, offline status