【问题标题】:Codeigniter - logout link doesn't works - session and cookies not destroyedCodeigniter - 注销链接不起作用 - 会话和 cookie 未销毁
【发布时间】:2013-10-02 22:32:03
【问题描述】:

我用控制器做了一个简单的注销 url,它看起来像这样:

 class Auth extends MX_Controller{
        function logout(){
          $this->session->sess_destroy();
          $this->bootstrap->unsetUserCookie();

          redirect(base_url(),'',301);
        }
    }

然后

class Bootstrap{

function unsetUserCookie(){
    $CI =& get_instance();
    $CI->input->set_cookie(
      array(
        'name'=>'remember_me',
        'value'=>'',
        'expire'=>''
        ));
    $CI->input->set_cookie(
      array(
        'name'=>'remember_me_n',
        'value'=>'',
        'expire'=>''
        ));
    $CI->input->set_cookie(
      array(
        'name'=>'duser_lang',
        'value'=>'',
        'expire'=>''
        ));
    $CI->input->set_cookie(
      array(
        'name'=>'duser_country',
        'value'=>'',
        'expire'=>''
        ));
  }
}

我正在使用会话数据库这些是我正在使用的配置参数:

$config['sess_cookie_name']     = 'sess_id';
$config['sess_expiration']      = 0; //24hours -> 8640
$config['sess_expire_on_close'] = TRUE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_session';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 3000000000;

然后我创建了一个简单的会话库,不知道这是否会阻止任何东西,但我想没有因为我根本没有收到任何错误:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

/*We encode/decode all session data in base64 to avoid problems with multybityes data*/
class MY_Session extends CI_Session {

      function set_userdata($data, $singleVar = NULL) {

          if(is_array($data)){
            $newValues = array();
            foreach ($data as $key=>$value) {

                $newValues[$key] = base64_encode($value);
            }

              parent::set_userdata($newValues);
          }
        else{
            if(is_array($singleVar)){
            $newValues = array();
            foreach ($singleVar as $key=>$value) {

            $newValues[$key] = base64_encode($value);
            }
            //Encode $singleVar 
            parent::set_userdata($data, $newValues);
            }else{
                 parent::set_userdata($data, base64_encode($singleVar)); 
            }
        }
    }
      function set_flashdata($data, $singleVar = NULL) {

          if(is_array($data)){
            $newValues = array();
            foreach ($data as $key=>$value) {

                $newValues[$key] = base64_encode($value);
            }

              parent::set_flashdata($newValues);
          }
        else{
            if(is_array($singleVar)){
            $newValues = array();
            foreach ($singleVar as $key=>$value) {

            $newValues[$key] = base64_encode($value);
            }
            //Encode $singleVar 
            parent::set_flashdata($data, $newValues);
            }else{
                 parent::set_flashdata($data, base64_encode($singleVar)); 
            }
        }
    }
     public function userdata($item) {

         $data = parent::userdata($item);
         if(is_array($data)){
            $newData = array();
            foreach ($data as $key => $value) {
                $newData[$key] = base64_decode($value);
            }
            return $newData;
         }else{
        //Decode $data
        return base64_decode($data);
    }
}



}



/* End of file  */
/* Location: ./application/controllers/ */

?>

url 很简单,只需要删除会话和 cookie,但是会话和 cookie 似乎没有被删除,因为在启动注销 url 后我仍然登录。

请问有什么线索吗?

【问题讨论】:

  • 您是否检查过会话(Cookie)是否真的被破坏,是否是您登录检查功能的问题?
  • 检查this关于删除cookies的问题/答案。

标签: php codeigniter session cookies logout


【解决方案1】:

我有同样的问题,是缓存问题。可以通过在构造函数或与登录代码相关的任何其他函数中添加以下头代码来解决。

header("Cache-Control: no-cache, must-revalidate");

【讨论】:

    【解决方案2】:

    你的代码是错误的:

    class Auth extends MX_Controller{
            function logout(){
              $this->session->sess_destroy();
              $this->bootstrap->unsetUserCookie();
    
              redirect(base_url(),'',301);
            }
        }
    

    this extends 是 MY_Controller,

    class Auth extends MY_Controller{
    

    【讨论】:

    • 不,我正在使用 HMVC,所以每个控制器实际上都必须扩展 MX_Controller :)
    • 是的,不支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多