设置cookie在CodeIgniter中不起作用

时间:2012-09-16 12:24:28

标签: codeigniter

我想设置一个名为 csrf_cookie_name 的cookie,其中包含此函数的值 $ this-> security-> get_csrf_hash(); 但是,它不是工作

我在控制器中有这个:

   $csrf_cookie_value = $this->security->get_csrf_hash();
   $this->input->set_cookie('csrf_cookie_name', $csrf_cookie_value);
   echo $this->input->cookie('csrf_cookie_name'); 
   die();

但它不起作用,没有任何回应。

如果我只尝试这个:

 $csrf_cookie_value =  $this->security->get_csrf_hash();
 echo $csrf_cookie_value;

我工作,生成的字符串被回显。

所以,我认为接下来的两行中的某些内容是错误的:

$this->input->set_cookie('csrf_cookie_name', $csrf_cookie_value);
echo $this->input->cookie('csrf_cookie_name'); 

感谢您的建议。

3 个答案:

答案 0 :(得分:20)

您需要指定Cookie的生命周期。 0将是会话Cookie,其他任何内容都将添加到time()

如果您未指定有效期,CI将解释您要删除 Cookie。而这正是它的作用:)

$this->input->set_cookie('name', 'value', 0);    //expires when the browser window closes
$this->input->set_cookie('name', 'value', 3600); //expires in one hour
$this->input->set_cookie('name', 'value');       //will delete the cookie (if the cookie does not exist, you will not notice anything happening)

答案 1 :(得分:7)

您没有收到cookie的原因是因为$this->input->cookie()函数直接从全局$_COOKIE数组读取而$this->input->set_cookie()不会立即填充$_COOKIE数组服务器。相反,$this->input->set_cookie()将cookie发送回队列并存储在浏览器中。只有在用户的下一个HTTP请求中,您才能重新观察此cookie。

其次,也许更重要的是,我认为你正在使用csrf cookie不正确。要防止跨站点请求伪造,只需要启用它并在config/config.php中设置它的属性。这就对了。根本不需要在控制器中读取和写入它。

答案 2 :(得分:3)

Cookie已经存在。您可以通过Javascript咨询:

$.cookie("<?php echo $this->config->item("csrf_cookie_name"); ?>");

我希望有用。