php - 确定用户是在 php 聊天应用程序中登录还是注销

标签 php mysql cookies browser instant-messaging

<分区>

所以,这是我所做的:

我在数据库的 users 表中添加了一列,该列称为 logged_in,每当用户登录时我将其设置为 1,然后设置它当用户注销时为 0(然后我通过检查他/她的每个 friend 的该列来显示用户的 friend 是否在线)。

我还必须在用户每次登录时保持登录状态,直到他通过单击注销按钮手动注销为止,这就是我使用 cookie 的原因。

如果用户总是通过单击我网站上的注销按钮注销(或者如果我以某种方式被允许在用户清除他们的 cookie 时更新我的​​数据库中的“logged_in”列(不可能),那么所有这一切都会很好用) .

这就是导致我出现问题的原因:

每当用户删除他们的 cookie 时,我的代码就会错误地将他们在我的数据库中的 logged_in 列读取为 1,尽管用户现在已注销(这会导致该用户的 friend 看到他“在线”而不是“离线”),这个错误一直存在,直到用户登录然后再次手动注销(按注销按钮),但每次用户清除他的 cookie 时都会发生。

我之所以没有使用任何与时间相关的东西(每 x 秒检查一次用户事件)来自动登录注销用户,是因为我必须让用户保持登录状态。

最后我的问题是:

用户应该只能通过手动按下我网站上的注销按钮来注销。我目前通过使用 cookie 使他们保持登录状态来实现这一点(这样他们就无法通过关闭我的网站或关闭浏览器来注销),但是当他们删除他们的 cookie 时,该用户就超越了我的第一定律,现在我的数据库错误地假定用户仍处于登录状态。

最佳答案

您使用 ajax 函数通过用户引用代码 ping 一个地址。然后你可以给请求打上时间戳并记录下来。要检查用户是否在线,请检查最后一次 ping 是否在当前的 x 时间内。

这还允许您分析有关您的活跃/标签用户的其他有用信息

关于php - 确定用户是在 php 聊天应用程序中登录还是注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40644336/

相关文章:

javascript - JavaScript 中对象长度的定义是什么?

javascript - JS cookie div 可见性

php - UTF-8贯穿始终

php - 强制用户选择至少一个复选框 - Laravel

php - 表单方法不从 html 表单返回数据,其中数据来自 mysql 中的单个列

Python MySQL 比较两个表

python - 如何访问页面内的第 3 方跟踪参数(通过 Python)?

php - Yii CDbCriteria 选择带有 AS 别名

php - 如何使用正则表达式从 MP3 文件名中获取艺术家和标题?

mysql - 我可以用一个查询更新两个相同的表吗 - MySQL