Codeigniter - 如果用户已登录

时间:2013-11-13 13:23:05

标签: php codeigniter

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

例如:

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

请如何做到这一点。

我已经有一个is_logged_in函数来检查用户是否已登录。

4 个答案:

答案 0 :(得分:1)

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

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

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

退出时

从用户端和“用户会话”模型中销毁会话


这将允许同一用户从多个设备登录,并通知他们。 然而,这可能会让你遇到他通常登录的“家用设备”的问题,这样你就不会用“已经登录”的消息向他发送垃圾邮件

答案 1 :(得分:1)

几年前我做了一件非常接近的事情但是我的处理方式略有不同。基本上我只允许每个用户登录1次,任何后续登录都会导致其他用户会话被破坏。

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

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

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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