在编码器点火器中自动注销用户会话


Logout user session automatically in codeigniter

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

这里的问题是我在会话中存储数据,如果我不会,那么我需要每次运行数据库查询,这会给应用程序带来太多的数据库负载。

无论如何,我们可以注销用户会话或在更改用户会话

值后立即更新用户会话值。如果我们能够更新这些,那么我的应用程序将检查并注销。

就像谷歌对Gmail没有一样。如果您从多个设备登录,则可以注销其他设备实例。

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

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

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

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

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

对于这种情况,如果您还没有接近完成您的项目 离子身份验证是一个很好的解决方案。 它具有组选项,您可以在__constract功能中检查用户是否为管理员。 像这样的东西

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