用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3750|回复: 4
收起左侧

[已解决] 為什麼COOKIE沒有值

[复制链接]
发表于 2010-7-30 12:28:12 | 显示全部楼层 |阅读模式
大家好:
我要把程式從用SESSION, 改成 COOKIE,
但是我設定後, 印出COOKIE來測試,
但是一直找不到值? 請教大家, 要怎麼修改它.
謝謝

以下是我的部份程式碼
$this->load->helper('cookie');
$cookie1 = array(
'name' => 'manager_login',
'value' => '1',
            );
set_cookie($cookie1);
$cookie2 = array(
'name' => 'manager_mid',
'value' => '$rs->mid',
            );
set_cookie($cookie2);
$cookie3 = array(
'name' => 'manager_group',
'value' => '$rs->manager_group',
          );
set_cookie($cookie3);
$cookie4 = array(
'name' => 'manager_name',
'value' => '$rs->manager',
 );
set_cookie($cookie4);

echo "cookie1=" . get_cookie('manager_login', TRUE) . "<br>";
echo "cookie2=" . get_cookie('manager_mid', TRUE) . "<br>";
echo "cookie3=" . get_cookie('manager_gorup', TRUE) . "<br>";
echo "cookie4=" . get_cookie('manager_name', TRUE) . "<br>";
发表于 2010-7-30 13:07:43 | 显示全部楼层
本帖最后由 ares333 于 2010-8-2 10:13 编辑

你看下cookie_helper.php的源码就明白了,expire是必须的而且必须是大于等于零的数字(10,'10',"10"这样的形式都可以),
expire 必须有,因为代码里有一处小bug,
定义的地方 function set_cookie($name = '', $value = '', $expire = '', $domain = '', $path = '/', $prefix = '')
$expire的默认值不应该是'',应该是0,或'0'(反正必须是大于等于零的数字)
 楼主| 发表于 2010-7-30 16:28:33 | 显示全部楼层
看他的說明
說明:
-------------------------------------------------- ------------------------------
只有 name 和 value 是必須的。可以通過將expire 設置成空來實現刪除cookie 的操作。

Cookie的過期時間是以秒為單位來設置的, 他是通過將Cookie的存續的時間值加上當前系統時間來得到的。切記,expire的值僅僅設置為Cookie需要存續的時間長短,請不要將當前的系統時間加上存續時間後再賦給變量。如果將expire設置成零,哪麼cookie僅在瀏覽器關閉的時候失效。
-------------------------------------------------- ---------------
看他的說明提到, 只有name和value 是必須的, 所以我只加了二個,
而我也參考你的意見, 把expore設為0(在瀏覽器關閉時失效),
但是還是印出來的COOKIE值還是空白的
以下是修改後的程式碼:
$this->load->helper('cookie');
$cookie1 = array(
      'name' => 'manager_login',
      'value' => '1',
      'expire' => '0',
 );
set_cookie($cookie1);
$cookie2 = array(
     'name' => 'manager_mid',
     'value' => '$rs->mid',
     'expire' => '0',
 );
set_cookie($cookie2);
$cookie3 = array(
      'name' => 'manager_group',
     'value' => '$rs->manager_group',
     'expire' => '0',
 );
set_cookie($cookie3);
$cookie4 = array(
      'name' => 'manager_name',
      'value' => '$rs->manager',
      'expire' => '0',
 );
set_cookie($cookie4);
echo "cookie=" . get_cookie('manager_login', TRUE) . "<br>";
echo "cookie=" . get_cookie('manager_mid', TRUE) . "<br>";
echo "cookie=" . get_cookie('manager_gorup', TRUE) . "<br>";
echo "cookie=" . get_cookie('manager_name', TRUE) . "<br>";
 楼主| 发表于 2010-7-30 18:16:37 | 显示全部楼层
你說的 "expire是必须的而且不能用单引号或双引号括起来, " 這一句話, 那用戶手冊裡面的範例是錯的喔

用这种方式的话,第一个参数传递的是一个关联数组:

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

不過, 我改成 0 , 改成 100  
'expire' => 0, 或者是  'expire' => 100, 讀到的還是空白,
是不是那裡還要設定, 而我沒設定到的.

拍謝, 實在是新手,
而我用SESSION來做, 都還可以, 只是公司說要用 COOKIE來做,
所以只能求救了, 因為實在是不熟.



set_cookie($cookie);
发表于 2010-7-30 18:31:58 | 显示全部楼层
is_numeric($expire)
这个只要是数字就行,不管是不是字符串,也就是:不是判断变量类型的。

本版积分规则