Yii在浏览器选项卡关闭时更新DB字段


Yii update DB fields on browser tab close

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

1.当用户登录时,我将DB字段logged_in更新为1。因此,如果同一用户再次登录,我会检查该字段(logged_in),如果其为1,则抛出"用户已连接"

2.如果用户处于非活动状态30分钟,我也会注销他

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

1.销毁会话

2.将DB字段logged_in更新为0。

当用户登录时,我将DB字段logged_in更新为1。因此,如果同一用户再次登录,我会检查该字段(logged_in),如果其为1,则抛出"用户已连接"。

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

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

因此,您应该在DB中为用户提供以下字段:

ip_address       | session_id          | last_active

您应该不断更新last_active字段,以便进行准确的比较。

如果用户处于非活动状态30分钟,我也会注销他。

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

您可以让会话cookie在30分钟后过期,因此如果它们处于非活动状态,将生成新的会话id。在每个页面上输入,如果用户已登录,则覆盖cookie,它将为其指定一个新的到期日期。如果距离上次活动已经超过30分钟,用户将自动获得一个新的会话id,从而取消上次会话和登录,并强制他们再次登录。

销毁会话

涵盖在最后一点。