谷歌/Facebook聊天如何知道哪些用户当前登录



这是一个无可否认的有点糟糕的问题,但是我的搜索结果被大量的隐私问题堵塞了:在一个高层次上,有人能告诉我如何检测哪些用户当前登录到我的网站吗?(我碰巧正在为一个学校项目创建一个Facebook克隆版,如果这有助于框定这个问题。)

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

这意味着在你的服务器的某个地方,你已经有了关于有多少人登录的信息(即有当前会话)。如果你使用的是web框架,你可能需要研究其会话管理的细节。如果你没有,你已经解决了问题;只要找出会话存储在哪里,瞧,您就知道哪些用户在线了。

当然,你不知道用户是否没有注销就离开了,但这是一个不容易解决的问题;会话管理系统通常会在一段给定的不活动时间(即服务器最近没有收到任何请求)后使会话过期,因此您可以按照系统告诉您的方式开始。如果你想要更多的东西,你可以自己跟踪最后一个活动,如果该活动在过去超过n分钟,就可以确定用户是不活跃的。

实际的答案将取决于您使用哪个框架来创建您的网站,但一般来说,浏览器与web服务器保持开放连接是可能的,这使双向通信成为可能。这有时被称为彗星。

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

你可以添加一个Javascript心跳到你的网页,每分钟检查一次,如果你在几分钟内没有听到他们的消息,那么假设他们已经注销了。否则,如果您的站点是基于会话的,则假设他们在会话到期时注销。

我实际上没有研究过它,但我假设一个无限期挂起的HTTP请求将在某人关闭页面的那一刻关闭。您可以利用这一点,通过使用像这样的请求来轮询用户何时关闭页面。

备选方案:每10秒用AJAX轮询一次新消息,当15秒没有轮询时,简单地说用户已经离开。

然而,在用户退出页面时实时检测一直是一个很大的问题。

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

最简单的方法是通过IP。

对您网站的每个请求都将由IP地址请求。你的主(索引)文件必须有一个逻辑来存储这些信息或显示给你。

最新更新