如何销毁Codeigniter文件夹之外的会话

时间:2018-02-07 09:20:32

标签: codeigniter

我正在研究CI项目。 以下是一个场景:

有一个项目A(文件夹A),里面有很多不同的门户网站说B,C,D,E等。 当我需要从C注销时,它也应该从B注销,反之亦然。 同样,如果我们不想从D退出,那么如何处理这种情况。目前,我陷入了这种情况。

实际上,在我的案例中,项目A包含8个门户网站。即使我正在路由到每个门户网站的注销页面,那么它也无法正常工作。

我试过删除CI的默认cookie但在任何情况下都不起作用。 我的助手,用于检查用户是否登录:

if ( ! function_exists('_is_frontuser_login')){
    function _is_frontuser_login($thi){
        $userid = $thi->session->userdata('userid');
        //  echo $userid;die();
        //$usertype = $thi->session->userdata('user_type');
        if(isset($userid) && $userid!=""){
            return true;
        }else{
            return false;
        }
    }   
}

注销页面包含以下代码: -

public function adslogout(){
    $this->session->sess_destroy();
    redirect("User/index");
}

我与很多开发人员讨论过这个问题,他们给我建议在session.php中进行更改。我尝试过但没有成功。

请帮帮我。

由于

2 个答案:

答案 0 :(得分:0)

您的解决方案是不保留sessionID,而是创建每个门户网站令牌表。这样,如果要注销Portal A,则删除附加到该sessonID和Portal A的令牌。同样,如果您应该同时自动注销Portal C,则可以执行此操作。实际上,您可以创建一个会话,但附加了与不同门户网站相关的令牌。

答案 1 :(得分:0)

尝试为每个成功登录的每个门户创建一个会话,如:

$this->session->set_userdata('portal_A',$loggedinCredentials);
$this->session->set_userdata('portal_B',$loggedinCredentials);
$this->session->set_userdata('portal_C',$loggedinCredentials);

然后取消设置相应的会话,如果他们在以下门户网站上注销:

   $this->session->unset_userdata('portal_C');

然后在每次访问门户网站时,您只需使用 isset()检查门户网站会话是否存在。

阅读:https://www.codeigniter.com/user_guide/libraries/sessions.html?highlight=session#