0

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

这是我设置 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。这是我第一次尝试在 CI 中使用 cookie,所以目前这个问题超出了我的范围。

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

4

4 回答 4

2

__于 2013 年 10 月 3 日为清晰而编辑__

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

你会发现一行:

$config['cookie_prefix']    = "";

此设置虽然给人的印象是可选的,但事实证明这是一项要求。似乎有一个错误,其中并不总是可重现的,因此很难追踪是什么以及为什么。底线是,如果未设置此配置项。在很多情况下,当 cookie 设置/获取它时,它会在引擎盖下无声地破裂。让您觉得它在起作用,而实际上却在起作用。

想象一下那是多么令人沮丧。无论如何,我对原始问题的修复是设置上面提到的前缀行。任何事情都会做,程序员的选择。

无论如何,对于那些打算设置它的人来说,值得注意的是。当您设置 cookie 时,您通常按照文档/指南进行操作。

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

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

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

当你调用它时不会得到你的 cookie 值,就像人们认为他们应该做的那样,即 doc 说:

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

像这样调用这个值很可能会导致屏幕上什么也看不到。如果你做了一个var_dump()例子。你会得到bool(false). 换句话说,这意味着它找不到您引用的 cookie。这是真的。它不可能不存在,记住你设置了一个前缀。要在那时获取您的 cookie,您需要执行类似的操作

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

这将打印出 cookie 的实际值。

于 2012-06-26T19:23:07.490 回答
0

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

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

于 2012-06-26T10:47:49.030 回答
0

我建议改用 CodeIgniter 的 Session 类。

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

于 2012-06-26T14:38:18.907 回答
-1

从文档:

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

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

于 2012-06-26T10:29:32.927 回答