代码点火器 - 如果用户已登录


Codeigniter - If user is already logged in

我想知道如何检查用户是否已登录,但是如果具有相同登录信用的其他人尝试登录,请向他们发送一条消息,说明用户已经在其他地方登录。

所以例如:

Pete - 使用 pete 作为用户名和 pete1 作为密码登录,但 pete 将他的详细信息提供给朋友使用,他的朋友 Dave 试图同时使用相同的详细信息,它需要向 Dave 发送一条消息,说有人已经使用这些详细信息登录。

请怎么做。

我已经有一个检查用户是否已登录的is_logged_in功能。

您需要一个"用户会话"模型来记录登录的用户,

用户登录

时,检查"用户会话"中是否存在会话,如果是,则发送"已登录"消息

然后在用户端建立会话,然后将会话添加到模型

注销时,从用户端和"用户会话"模型销毁会话


这将允许同一用户从多个设备登录,并通知他们。但是,这可能会使您遇到他通常登录的"家庭设备"的问题,这样您就不会向他发送"已登录"消息的垃圾邮件

几年前

我做了一些非常接近的事情,但我的做法略有不同。基本上,我只允许每个用户进行一次 1 次登录,任何后续登录都会导致其他用户会话被销毁。

为了使其以这种方式工作,我必须创建一个自定义会话管理器,以将用户用户名和会话ID存储在数据库中。然后我所做的只是进行查找以查看用户是否已经登录,如果是,那么我只是删除了数据库会话。

您的解决方案可以通过执行相同的操作轻松实现,但稍微更改逻辑并阻止用户通过查找部分。

您所要做的就是扩展 CodeIgniter 会话类并进行更改,这也不是那么困难。

将会话记录到数据库将允许您跟踪此情况。请参阅 http://ellislab.com/codeigniter%20/user-guide/libraries/sessions.html

在页面上搜索"将会话数据保存到数据库"。

将会话存储在数据库中后,您可以检查该用户名当前是否已登录。不过,它确实有一个警告 - 如果用户在关闭浏览器之前没有注销,并且会话未设置为正确过期,它会告诉您用户已经登录,即使他/她没有(基于会话数据是否存在)。

我通过检查 cookie 并为用户设置特定的 cookie 来解决这个问题。如果用户的会话 Cookie 与系统的会话 Cookie 不匹配,则该用户将被强制退出,新用户将获得控制权。不过,这可能很烦人。