【问题标题】:Codeigniter cookie is set but returns NULLCodeigniter cookie 已设置但返回 NULL
【发布时间】:2015-08-27 00:34:41
【问题描述】:

我只是不明白为什么我的 cookie 返回 NULL 值。 我想我在设置 cookie 时设置了正确的语法,我已经检查过的 if 条件没有问题。配置文件中的 global_xss_filtering 选项是否相关?必须将其设置为 true 才能使 cookie 工作

如果有人指出我的错误,我很高兴。

我的控制器

    public function store_cookie(){
            if($this->input->post('remember_me') == 'remember'){
                                $cookie = array(
                                'name'   => 'remember',
                                'value'  => 'logged_in',
                                'expire' => '86500',
                                'secure' => TRUE
                                );
                            $this->input->set_cookie($cookie);
                            var_dump($this->input->cookie($cookie));
                            //This is where i do my checking and it returns NULL
                            die(); 
                            //model
                            $this->load->model('admin_model');
                            $this->admin_model->store_cookie($this->input->post('email'),$this->input->post('remember_me'));

                            }

                }


public function validate_credentials2(){
        $this->load->model('admin_model');
        $query = $this->admin_model->validate();

        if($query){
                // if($this->input->post('remember_me')== 'remember'){
                //  $cookie = array(
                //         'name'   => 'remember',
                //         'value'  => 'logged_in',
                //         'expire' => '86500',
                //         'secure' => TRUE
                //  );
                // $this->input->set_cookie($cookie);
                // }
                $this->store_cookie();

                $data = array(
                    'email' => $this->input->post('email'),
                    'is_logged_in' => TRUE,
                    'role' => 'admin'
                    );
                $this->session->set_userdata('counter2', 0);
                $this->session->set_userdata($data);
                redirect('admin/home', 'refresh');
}

//admin controller
public function home(){
             var_dump($this->input->cookie('remember')); //still returns NULL
             die(); 
            $this->load->view('ui/admin_home');
        }

【问题讨论】:

  • 在下一页加载之前您无法检查 cookie
  • 感谢您的回答先生,我只想澄清如果我成功登录并存储了一个 cookie 以实现“记住我”功能。登录后,我会关闭浏览器,cookie是否已经设置了我在新打开的浏览器中再次打开我的网站时的值?
  • 您好,先生,将其重定向到管理视图的控制器后仍然返回 null

标签: php codeigniter cookies


【解决方案1】:

我找到了解决问题的方法。

我将过期设置为数值,将安全设置为 false。

来源: https://stackoverflow.com/a/9200289/4779791

【讨论】:

  • 谢谢你,是的,我匆忙下结论可能是因为我的 cookie 终于恢复了我的价值。我测试了放回“”,它仍然有效
【解决方案2】:

查看documentation

'secure' => TRUE

仅适用于 https...

还添加路径和域为

'domain' => '.localhost',
'path'   => '/path_to_the_folder_name',

您必须将用户 ID 存储在 cookie 中,当页面打开时...在检查会话之前检查 cookie...

如果在cookies中设置了用户ID...获取用户并在会话中设置用户...

【讨论】:

  • 我使用的是本地主机,所以我将安全变量更改为 FALSE,不幸的是 cookie 值保持为 NULL
  • 你添加 $this->load->helper('cookie');...??并在浏览器中清理您的 cookie..
  • 我已经将它与表单和url一起设置在配置文件中,所以我假设它已经运行...我将尝试清理浏览器上的cookie
  • 请如上添加路径和域
  • 它仍然有一个 NULL 值,感谢您的帮助
【解决方案3】:
//admin controller
public function home(){
         var_dump($this->input->cookie('remember')); //still returns NULL
             die(); 
          $this->load->view('ui/admin_home');

        }

改成:

public function home(){

         $data['cookie'] = $this->input->cookie('rememeber', TRUE);

          $this->load->view('ui/admin_home',$data);

        }

您也可以通过调用它在视图页面中使用它。

【讨论】:

  • 'remember' cookie 的值仍然为空
  • $cookie_email = array('name' => 'admin_email', 'value' => $this->encrypt->encode($this->input->post('email')) , '过期' => 20*365));安全仅支持 https 页面。而不是你可以使用加密库
  • 注意到先生,虽然我担心的是为什么我不能从我在第一个控制器中设置的 cookie 中获取值。 .htaccess 文件会影响这个吗?
  • 不。它不会。你可以在你的视图页面中直接调用它 print_r(get_cookie('cookie'));试试这个....
猜你喜欢
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 2022-06-12
  • 1970-01-01
  • 2021-12-25
  • 2011-12-20
相关资源
最近更新 更多