Yii更新浏览器选项卡上的数据库字段

时间:2015-03-25 11:54:19

标签: php jquery session yii

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

1。当用户登录我更新数据库字段logged_in为1.So,如果同一用户再次登录,我检查此字段(logged_in),如果其1,则抛出'用户已连接'。

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

我想在浏览器标签关闭

上执行以下操作

1。销毁会议

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

1 个答案:

答案 0 :(得分:1)

  

当用户登录我更新数据库字段logged_in为1.So,如果同一用户再次登录,我检查此字段(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,从而使上次会话和登录无效,并强制他们再次登录。

  

销毁会话

最后一点。