2011-12-11 79 views
1

这确实是一个可怕的问题,但我的搜索结果被大量的隐私问题堵塞:在高层次,有人可以向我解释如何检测哪些用户当前登录到我的网站? (如果这有助于解决问题,我正在为学校项目构建Facebook克隆。)Google/Facebook聊天如何知道当前登录的用户?

+2

如果rekire和olivehour的答案降级,我希望你也可以降级我的答案。你可能想评论一下为什么这不能回答你的问题,或者改变你的问题,因为这正是你所要求的。 – Nicolas78

+0

我不知道Facebook是如何做到的,但今天早些时候我看到了这个问题,并从Firebase中发现了“[存在](https://www.firebase.com/tutorial/#session/a0aev1q0skq)”教程应用程序。它查询持久存储(数据库行)以查看用户是否“登录”。无论您使用数据库还是会话cookie,只需访问登录和注销事件即可确定用户是否在线。 – jrhorn424

回答

1

那么,用户登录到您的网站会发生什么?会话在服务器端创建,将用户未来的请求链接到登录。这必须发生,因为HTTP本身是无状态的 - 也就是说,它不知道现在请求其个人资料页面的人与刚通过身份验证的人是一样的,除非您让客户端发回一些信息,通常是cookie或,现在不那么频繁,URL中的会话ID。

这意味着您的服务器上的某个地方已经有多少人登录(即有当前会话)的信息。如果您使用的是Web框架,则可能需要查看其会话管理的详细信息。如果你不是,你已经解决了这个问题。只需找出会话的存储位置,即可知道哪些用户在线。

当然,你不知道用户是否没有注销就离开了,但这是一个难以解决的问题;会话管理系统通常在一段给定的不活动时间后(即,你的服务器最近还没有收到任何请求),所以你可以使用任何系统告诉你的开始。如果您想要更多内容,则可以自行跟踪最近一次的活动,并且如果该活动过去的分钟数大于n分钟,则可以决定用户处于非活动状态。

-1

当用户登录您的站点时,您将他们的活动记录到数据库。然后,你开始检测他们在网站上的活动。如果他们闲置了一段时间(例如他们的最后一次活动是10或15分钟前),则可以假定他们处于离线状态。

1

实际的答案将取决于您使用哪些框架来创建您的网站,但一般而言,浏览器可能与Web服务器保持开放连接,从而实现双向通信。这有时被称为COMET。

Facebook等,然后可以跟踪它有什么打开的连接,哪些用户登录,并发起连接(使用相同的会话技术,它用于维护跨请求用户状态)。

-1

最简单的方法是通过IP。

对您的网站的每个请求都将通过IP地址进行请求。你的main(index)文件必须有一个逻辑来把这个信息存储在某个地方或者显示给你。

这是找出当前查看您网站的人最简单的方法。

1

我还没有真正研究它,但我会假设一个无限期挂起的HTTP请求会在有人关闭页面时关闭。您可以使用这种方式来利用此优势,通过使用这样的请求来轮询用户关闭页面的时间。

替代方法:每10秒钟对新消息进行一次轮询,并简单地说,如果用户在15秒内没有轮询,则用户已经离开。

但是,实时检测当用户退出该页面时一直是一个大问题。

1

您可以在每分钟检查一次的网页上添加一个Javascript心跳,如果您在几分钟内没有收到任何消息,则认为它们已注销。否则,如果您的网站是基于会话的,则假定他们在会话过期时注销。

相关问题