我在服务器上运行php登录脚本。当用户登录时,用户名存储在$_SESSION['username']
中,并且在我的一个DB表中存在一个名为nonline
的字段,用于存储登录的用户数量。
用户登录时,nonline
值加1。每当用户注销时,它就减少1。到目前为止还很整洁。: P
问题开始时,大多数用户,像我一样,不点击登出,或访问登出页面。他们登录,完成后关闭浏览器/标签。这样做不会减少非联机值。因此,即使用户不再浏览我的网站,该值也保持不变。
是否有任何方法可以确定在任何给定时间实际查看我的网站的用户数量,以便即使用户关闭浏览器而不是单击注销,其值也会发生变化?我不使用cookie登录
通常,这将通过跟踪最后一个操作或最后一个页面加载的表来完成。数字n_online
(您可能想要添加_
, noline
以no
开头,乍一看有点奇怪)将是在最后n
秒内进行某种形式的操作的数字-主动注销的人数。
不幸的是,没有。任何你想要的解决方案都会涉及到浏览器在选项卡/窗口关闭时触发某种HTTP请求,而这是不会发生的。
最好的方法是让用户的会话在相对较短的时间(例如15分钟)后超时,并对每个想要知道实际活动用户数量的脚本执行过期会话的积极清理。请注意,这将对性能不利。
如果15分钟对您来说仍然太长,并且您无法减少会话生存期(因为如果用户在10秒不活动后退出会惹恼他们),您可以让页面使用AJAX"ping"服务器以保持会话存活。这将允许您获得几乎实时的结果,但是它可能会降低您的性能,它对禁用JavaScript的用户不起作用,并且如果用户遇到短暂的连接问题,则容易发生故障。