请以正确的方式帮助您。我想添加'如果用户在线'系统。我将用它来防止在1个名称下进行多次登录,此系统也会向用户显示当前在线人员的选项。
据我所知,我需要mysql表来存储在线用户。但是,如果用户还在这里,我怎么能理解每一秒?如果他退出然后确定,这很容易,但如果他将重新启动?或者是其他东西 ?那么我如何控制所有用户并了解他们的状态呢?
更新经过与Cupcake的一些讨论,我决定只有谁的在线功能,让1个用户多次登录,导致很难阻止他以舒适的方式这样做。
答案 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)
一旦打开一个新会话,就会使用户的所有旧会话无效。这样,他一次只能运行一个会话(也就是一次登录)。