1

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

例如:

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

请问这个怎么做。

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

4

4 回答 4

1

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

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

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

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


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

于 2013-11-13T15:11:16.537 回答
1

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

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

你的解决方案可以很容易地通过做同样的事情来实现,但稍微改变一下逻辑,只是防止用户通过查找部分。

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

于 2013-11-13T15:11:51.480 回答
0

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

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

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

于 2013-11-14T11:27:25.410 回答
0

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

于 2015-07-21T18:09:46.637 回答