Codeigniter Cookie Issue


Codeigniter Cookie Issue

在我的第一个视图中没有设置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 cookie做同样的事情会得到一个包含cookie值的数组。

  • 这个问题只在第一次访问页面时存在。

这不是CodeIgniter vs PHP的问题。你只是不明白cookie是怎么工作的。

cookie是由服务器发送的报头,浏览器在后续请求时必须将其发回。$this->input->set_cookie()set_cookie() 发送一个cookie头。

$_COOKIES在PHP(因此$this->input->cookie()get_cookie()助手)只包含cookie, 浏览器发送。

因此,当您使用set_cookie()设置cookie时,您将无法使用get_cookie(),直到浏览器的下一个请求

考虑到CI的set_cookie可能使用与PHP的setcookie()相同的机制,手册中的这一项可能适用:

常见的陷阱

cookie在下次加载应该显示cookie的页面时才会显示。要测试是否成功设置了cookie,请在cookie过期之前检查下一个加载页面上的cookie。过期时间通过Expire参数设置。调试cookie存在的一个好方法是简单地调用print_r($_COOKIE);

我在CI手册中没有看到任何关于这种行为的提及,但很可能是同一件事。

如果我理解这一点,你试图在重新加载页面之前看到cookie的数据,这将不起作用。尝试设置cookie,重新加载页面,然后检查cookie是否有数据。

有时你还需要指定域之类的,也许它现在不适用,但如果它们突然停止工作,以后知道可能会很好,从CI-documentation:

$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

这可能不是问题所在,事实上这就是cookie的工作原理,它的设置和在下一个页面加载时似乎从那时起就可以看到