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)
并允许一个用户一次登录一台计算机或一次登录一个浏览器,您可以在此处阅读更多信息