代码点火器设置饼干,饼干不设置


CodeIgniter Setting cookies, cookies not setting

在问这个原因之前,我已经在这里和谷歌上搜索过,我发现这是一个流行的问题,但我找到的答案我已经尝试过了,但我仍然失败了。

这是我尝试设置 cookie(请注意,帮助程序是自动加载的)

$longlife = 60*60*24*60; //60 days
$shortlife = 60*60*24*10; //10 days
$this->input->set_cookie('AutoRemember', $user.'::'.$hashbrown, $shortlife, '.example.com', '/');
$this->input->set_cookie('LongRemember', $user.'::'.$hashbrown, $longlife, '.example.com', '/');

当我尝试在"$this->input->cookie()"上执行var_dump时,我得到 bool false 作为输出,这意味着没有找到 cookie。这是我第一次尝试将 cookie 与 CI 一起使用,所以这个问题目前超出了我的范围。

另请注意,我将上面示例中的真实域更改为 example.com,因为我不希望该域现在显示在搜索中。

__ 2013年10月3日编辑 对于克拉里蒂 __

好吧,我

弄清楚我的问题是什么,我相信这也将有助于新来的人。因此,当您最初设置application/config/config.php

你会发现一行:

$config['cookie_prefix']    = "";

虽然给人的印象是可选的,但事实证明,此设置更像是一种要求。似乎有一个错误,其中并不总是可重现的,因此很难跟踪什么以及为什么。底线是,如果未设置此配置项。在少数情况下,当饼干正在设置/获取时,它会在引擎盖下无声地破裂。给你留下的印象是它在工作,而它没有。

想象一下,这是多么令人沮丧。无论如何,我对原始问题的解决方法是设置上面提到的前缀行。什么都可以,编码人员选择。

无论如何,对于那些

打算设置它的人来说,值得一提。当您设置cookie时,您可以按照文档/指南正常进行。

$this-input->set_cookie('myCookie');

但是,我注意到文档没有指定(或上次没有检查)是您设置的前缀

$config['cookie_prefix']    = "cmh_";//example

当您调用它时,不会像人们认为的那样为您提供cookie值,文档说应该这样做,即:

$this->input->cookie('myCookie');

像这样调用值很可能会导致屏幕上看不到任何内容。例如,如果您做了var_dump()。你会得到bool(false).换句话说,这意味着它找不到您引用的cookie。这是真的。它不可能不存在,记住你设置了一个前缀。要在这一点上获得您的cookie

,您需要执行以下操作
$this->input->cookie('cmh_myCookie');

这将打印出 cookie 的实际值。

我建议改用CodeIgniter的Session Class。

http://codeigniter.com/user_guide/libraries/sessions.html

供参考,您不能从具有不同名称(如"yoursite.com")的域(HTTP_HOST)中为域"example.com"设置cookie。 这是安全问题,浏览器会忽略它。 使用Mozilla Firebug "NET"选项卡检查响应标头,如果cookie存在,并且未设置,那么我是对的。

其次,在您设置 cookie 后,它将在服务器 (php) 上可用,仅在下一个请求中,因为当前 $_COOKIE 仍未更新。 如果 CI 以不同的方式实现这一点,这是该概念的错误实现。

从文档中:

This function is identical to the post function, only it fetches cookie data:
$this->input->cookie('some_data', TRUE);

好吧,正如这表明的那样,您需要添加cookie的名称才能获得它。尝试输出$this->input->cookie('AutoRemember')