关于制作'如果用户在线'系统

Questions about making 'if user is online' system

本文关键字:在线 系统 用户 如果 于制作      更新时间:2023-09-26

请帮助以正确的方式开始。我想添加"如果用户在线"系统。我将使用它来防止在一个名字下多次登录,这个系统也将为用户添加选项,显示他们谁是在线的时刻。

我知道我需要mysql表,我将存储在线用户。但如果用户还在,我怎么能理解每一秒?如果他退出了,那很简单,但如果他会重启呢?还是别的什么?那么我怎样才能控制所有的用户并且每秒了解他们的状态呢?

UPDATE经过与Cupcake的一些讨论,我决定只有谁的在线功能,让一个用户登录多次,因为很难阻止他这样做在一个舒适的方式。

renew该表记录,每次用户请求一个页面时更新访问时间字段。
从该表中删除所有访问时间字段超过合理超时时间(如5分钟)的记录

为了防止在一个名字下多次登录,您必须在users表中存储会话id。当用户登录时,在该字段中激活当前会话id每次用户请求页面时,将此id与实际会话id进行比较,并使用户重新登录

你可以这样做,这是我有时做的,是在用户表中有一个列命名为session_hash或类似的

每次用户登录时,自己生成一个新的会话哈希,或者使用session_id PHP,只要你在每个页面上使用session_start

然后从数据库中检索用户行,使用该session_hash的cookie。


例子

登录表单

Username:  [       ]
Password:  [       ]
Remember?: [*]
           [ Login ]

PHP页面执行以下操作

User logs in ->
  System generates a session_id or "salt"
  Updates the users row with the session_id or "salt" value
  Check if the value of the "remember" checkbox is true ->
    Sets a cookie with that session_id or "salt" with a month or so expiration date
  Otherwise just create a normal cookie with the value

然后在每页上执行以下操作

Check if the session_id or "salt" cookie is set ->
  If it is, fetch the users row from the database
    SELECT * FROM users WHERE session_id/"salt" = value of cookie

如果让用户选择他们是否希望每次访问都被记住,如果他们创建了一个至少一个月不会过期的cookie,那么他们下次访问网站时将被记住,但是如果他们从另一个浏览器或计算机登录,"salt"将在另一台计算机上无效

一旦用户打开一个新会话,就简单地使所有旧会话无效。通过这种方式,他一次只能运行一个会话(也就是一个登录)。