在codeigniter中自动注销用户会话

时间:2016-01-23 07:27:09

标签: php session codeigniter-3

我正在制作一个基于CI 3.0.4的基于Web的管理面板应用程序。因此,如果用户以管理员身份登录,但如果超级用户同时将该用户从admin更改为普通用户,则应立即注销。

这里的问题是我在会话中存储数据,如果我不这样做,那么我每次都需要运行db查询,这将在应用程序上放置过多的数据库负载。

无论如何,我们可以在更改后立即注销用户会话或更新用户的会话值。如果我们能够更新那些,那么我的应用程序将检查并注销。

谷歌与gmail相同。如果您从多个设备登录,则可以注销其他设备实例。

请提出一些逻辑或最好的方法来处理这种情况。

2 个答案:

答案 0 :(得分:1)

如果您需要操作当前存储在会话中的一段数据,那么它不应该首先存储在那里。

尝试阅读和/或更改其他用户的会话数据可能是最直接的想法,因为在会话本身内部存储“登录”标志会更容易。然而,这样做是错误的,并不像听起来那么容易。 会话数据旨在由一个用户和一个用户读取,并且由于PHP序列化会话数据的方式,忽略这一事实是不可能的。

与其他人的评论相反,将驱动程序更改为“数据库”也无济于事。这是序列化格式,这使得这很难,而不是存储。

实际的解决方案是以某种方式将sessionId <-> userId关系存储在会话本身之外,以便稍后可以删除属于您刚刚修改过的权限的用户的所有会话。 事实上,关系数据库确实使这个变得微不足道,但你可以使用任何类型的存储。

答案 1 :(得分:-1)

对于这种情况,如果你没有接近完成你的项目ion auth是一个很好的解决方案。它有组选项,您可以在__constract函数中检查用户是否为admin。像这样的东西

public function __construct()
  {
    if (!$this->ion_auth->is_admin()) {$this->ion_auth->logout();die();}
    parent::__construct();
    $this->load->database();