关于制作“如果用户在线”系统的问题

时间:2011-09-01 11:37:25

标签: php javascript mysql

请以正确的方式帮助您。我想添加'如果用户在线'系统。我将用它来防止在1个名称下进行多次登录,此系统也会向用户显示当前在线人员的选项。

据我所知,我需要mysql表来存储在线用户。但是,如果用户还在这里,我怎么能理解每一秒?如果他退出然后确定,这很容易,但如果他将重新启动?或者是其他东西 ?那么我如何控制所有用户并了解他们的状态呢?

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

3 个答案:

答案 0 :(得分:2)

每次用户请求页面时更新此表记录,更新访问时间字段 从该表中删除所有访问时间字段早于某个合理超时的记录,如5分钟

要防止在1个名称下进行多次登录,您必须在users表中存储会话ID。 当用户登录时,在此字段中强制显示当前会话ID 每次用户请求页面时,将此id与实际会话ID进行比较,并使用户重新登录

答案 1 :(得分:1)

你可以做什么,我有时会这样做,就是这个,在用户表中有一个名为session_hash的列或类似的东西。

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

然后从数据库中检索用户行,请使用该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”在另一台计算机上无效。

答案 2 :(得分:0)

一旦打开一个新会话,就会使用户的所有旧会话无效。这样,他一次只能运行一个会话(也就是一次登录)。