销毁Code Igniter中的特定会话

fro*_*sty 43 session codeigniter destroy

工作人员注意:此问题及相关答案已锁定,以防止围绕与当前问题相关的当前事件进行主题讨论.有关此活动的 问题可以在我们的meta网站上找到.谢谢!

我希望能够将用户从我在Code Igniter中构建的应用程序中注销.

我知道如何结束活动的本地会话:

$this->session->sess_destroy();
Run Code Online (Sandbox Code Playgroud)

但是,如何销毁在另一台计算机上启动的会话,从而将用户从会话中注销?

我在会话数据中存储了与其帐户关联的唯一ID,因此我可以在数据库的会话表中看到它,但它与其他会话数据一起存储在名为user_data的列中,其内容看起来像这个:

a:4:
{s:9:"user_data";s:0:"";s:6:"userid";s:6:"189034";s:9:"logged_in";b:1;s:5:"token";i:1767727789;}
Run Code Online (Sandbox Code Playgroud)

189034用户的ID 在哪里.

那么,有没有办法以某种方式根据用户的id选择会话表中的行,然后删除该行并销毁会话.或者还有另一种方法可以完全做到这一点吗?

Ste*_*evo 31

在ci_session表中创建一个新列.

ALTER TABLE `yourdatabase`.`ci_sessions` 
ADD COLUMN `userid` VARCHAR(45) NULL  AFTER `user_data` ;
Run Code Online (Sandbox Code Playgroud)

然后在您的登录功能中获取登录过程中的id,并在将userdata信息添加到会话之前执行以下操作:

/* Delete any existing sessions with the current userid session.
Note - a new session has already been generated but doesn't have a value
in the userid column, so won't get deleted. */
$this->db->delete('ci_sessions',array('userid' => $identity));    

// Get the current session and update it with the userid value.
$session_id = $this->session->userdata('session_id');
$this->db->where('session_id', $session_id);
$this->db->update('ci_sessions', array('userid' => $identity));
Run Code Online (Sandbox Code Playgroud)

其中$ identity是您的用户ID.这清除了之前的任何会话,意味着一次只存在一个会话.


小智 5

有销毁您想要的某些项目/会话的功能

$this->session->unset_userdata('session_name')
Run Code Online (Sandbox Code Playgroud)

并允许一个用户一次登录一台计算机或一次登录一个浏览器,您可以在此处阅读更多信息

一次只允许一个会话