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

Yii update DB fields on browser tab close

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

1.当用户登录时,我将数据库字段 logged_in 更新为 1.So,如果同一用户再次登录,我会检查此字段 (logged_in),如果它是 1,则抛出 'user already connected'.

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

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

1.销毁会话

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 和会话 ID (Yii::app()->getSession()->getSessionId())。

如果新登录有不同的会话 ID and/or IP,他们应该抛出一个错误(根据您的请求),尽管我建议避免用户忘记注销而不得不等待 30 分钟的挫败感,并覆盖旧会话。因此,如果用户在同一时间段从不同位置登录,您可以覆盖会话 ID 和 ip 地址,旧会话将自动注销。

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

ip_address       | session_id          | last_active

您应该更新 last_active 字段以便比较准确。

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

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

您可以让会话 cookie 在 30 分钟后过期,以便在它们处于非活动状态时生成新的会话 ID。 在每个页面上输入,如果用户登录,覆盖 cookie,它会给它一个新的到期日期。 如果距离上次activity已经超过30分钟,用户将自动获得一个新的会话ID,从而使上次会话和登录无效,并强制他们重新登录。

destroy session

最后一点已涵盖。