Codeigniter Cookie问题

时间:2011-12-11 14:06:43

标签: php codeigniter cookies

我的第一个视图中没有设置Cookie。

这是怎么回事?或者我错了

请查看以下代码以进一步说明:

 if( !get_cookie('rate') ){



            $cookie_rate = array(
                   'name'   => 'rate',
                   'value'  => '10',
                   'expire' => '100000'
             );

             set_cookie($cookie_rate);
     }
   var_dump( get_cookie('rate') ); //returns ( boolean false )

   if( !isset($_COOKIE['foo']) ){
            $_COOKIE['foo'] = 'bar';
   }

   var_dump( $_COOKIE['foo'] ); // This yields string 'bar' (length=3) on the first visit 

使用php cookies做同样的事情会产生一个带有cookie值的数组。

  • 此问题仅在首次访问页面时仍然存在。

4 个答案:

答案 0 :(得分:3)

这不是CodeIgniter与PHP的问题。你只是不明白cookie是如何工作的。

Cookie是服务器发送的标头,浏览器必须在后续请求中发送回标头。 $this->input->set_cookie()set_cookie() 发送 Cookie标头。

PHP上的

$_COOKIES(因此$this->input->cookie()因此get_cookie()帮助程序)仅包含浏览器发送的cookie。

因此,当您使用set_cookie()设置Cookie时,在浏览器的下一个请求之前,您将无法get_cookie()

答案 1 :(得分:2)

看作CI的set_cookie可能使用与PHP的setcookie()相同的机制,manual的这个条目可能适用:

  

常见陷阱

     

在下次加载可以看到Cookie的网页之前,Cookie才会显示。要测试cookie是否已成功设置,请在cookie过期前检查下一个加载页面上的cookie。过期时间通过expire参数设置。调试cookie存在的一种好方法是简单地调用print_r($ _ COOKIE);。

我在CI manual中看不到有任何关于此行为的提及,但它可能是相同的。

答案 2 :(得分:1)

如果我理解这一点,那么在重新加载无法正常工作的页面之前,您会尝试查看Cookie的数据。尝试设置cookie,重新加载页面,然后检查cookie以获取数据。

有时候你需要指定域名等等,也许它现在还没有适用,但是如果他们突然停止工作,可能会很高兴知道CI文档:

$cookie = array(
'name'   => 'The Cookie Name',
'value'  => 'The Value',
'expire' => '86500',
'domain' => '.some-domain.com',
'path'   => '/',
'prefix' => 'myprefix_',
'secure' => TRUE
);

$this->input->set_cookie($cookie); 

此外,如果您不需要任何特定于Cookie的内容,请考虑使用会话类而不是Cookie,因为它们更安全。 http://codeigniter.com/user_guide/libraries/sessions.html

答案 3 :(得分:1)

这可能不是问题,事实上,cookie是如何工作的,它的设置和下一页加载它似乎从那时可见。