php - Yii 在浏览器选项卡关闭时更新数据库字段

标签 php jquery session yii

在我的 Yii 应用程序中,我想防止同一用户同时登录。

<强>1。当用户登录时,我将数据库字段logged_in更新为1。因此,如果同一用户再次登录,我检查此字段(logged_in),如果其为1,则抛出“用户已连接”。

<强>2。如果用户 30 分钟不活动,我也会注销他。

我想在浏览器选项卡关闭时执行以下操作,

<强>1。销毁 session

<强>2。将数据库字段logged_in更新为0。

最佳答案

While user login i update DB field logged_in as 1.So, if same user login again i check this field (logged_in) and if its 1 then throw 'user already connected'.

当用户尝试登录时,您应该比较 IP 和 session ID (Yii::app()->getSession()->getSessionId())。

如果新登录有不同的 session ID 和/或 IP,他们应该抛出一个错误(根据您的请求),但我建议避免用户忘记注销并等待 30 分钟而感到沮丧,只需覆盖旧 session 。因此,如果用户在同一时间段从不同位置登录,您可以覆盖 session ID 和 IP 地址,旧 session 将自动注销。

因此,您应该在用户的数据库中包含这些字段:

ip_address       | session_id          | last_active

您应该不断更新 last_active 字段,以使比较准确。

I also logout user if he is inactive for 30 minutes.

每当用户尝试登录或进入页面时(无论如何您都应该重新进行身份验证): - 如果用户在过去 30 分钟内处于事件状态,并且其他信息匹配,则这是当前 session 并且登录为空(可以忽略并定期继续)。 - 如果用户在 30 分钟或更长时间内处于非事件状态,则此新登录信息应覆盖旧信息。因此,新的 IP 地址和 session ID。 - 如果用户处于事件状态但信息不同,则抛出错误(就像我说的,我会避免这样做)。

您可以让 session cookie 在 30 分钟后过期,以便在它们不活动时生成新的 session ID。 在输入的每个页面上,如果用户已登录,则覆盖 cookie,并为其指定一个新的到期日期。 如果距离上次事件超过 30 分钟,用户将自动获取新的 session ID,从而使上次 session 和登录无效,并强制他们再次登录。

destroy session

最后一点已涵盖。

关于php - Yii 在浏览器选项卡关闭时更新数据库字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29254930/

相关文章:

php - 日期的平均天数 Mysql、PHP

javascript - PHP 表单使用 AJAX 传递发布数据

javascript - 使用jquery检查页面高度

javascript - java应用程序中的 session

php - 从 PHP 数组发布多个值

php - 如何让 php 中的 mysql 查询运行得更快

javascript - jQuery 日期选择器在 ASP.Net MVC4 中无法正常工作

jquery - 用 jQuery 替换空选择框

asp.net-mvc - 首次加载时,在哪里/如何使用存储在 MVC 应用程序中的 cookie 数据中的用户填充 session ?

php - 验证 socket.io/nodejs 的用户