我的第一个视图中没有设置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值的数组。
答案 0 :(得分:3)
这不是CodeIgniter与PHP的问题。你只是不明白cookie是如何工作的。
Cookie是服务器发送的标头,浏览器必须在后续请求中发送回标头。 $this->input->set_cookie()
和set_cookie()
发送 Cookie标头。
$_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是如何工作的,它的设置和下一页加载它似乎从那时可见。