【发布时间】:2016-01-19 13:53:00
【问题描述】:
我正在尝试将 cookie 设置为登录脚本的一部分,但 cookie 似乎从未设置过。我用大量调试点检查了代码,调用了 st cookie 并且 setcookie 响应为 true,但检查时不存在 cookie。我已经通过使用 chrome 查看我的 cookie 进行了仔细检查 - 这个应用程序没有。
在此之前的步骤检查已发送的标头,所以我知道这不是问题。
<?php
// ...
public function set_cookie($cookie,$value,$time=0){
$cookieCONF = core::get()->factory()->get_config('cookie',array('path'=>'/','domain'=>'.'));
core::get()->debug()->log("COOKIE[{$cookie}]", $value, FALSE, 7);
if($time!==0){
$time= time()+$time;
}
if(!is_array($value)){
setcookie($cookie, $value, $time, $cookieCONF['path'], $cookieCONF['domain']);
}else{
foreach($value as $val=>$ue){
core::get()->debug()->log("{$cookie}[{$val}]", $ue, FALSE, 8);
if(setcookie("{$cookie}[{$val}]", $ue, $time, $cookieCONF['path'], $cookieCONF['domain'])){
core::get()->debug()->log('COOKIE RESULT',"SET {$cookie}[{$val}]={$ue}", FALSE, 8);
}else{
core::get()->debug()->log('COOKIE RESULT',"NOPE {$cookie}[{$val}]={$ue}", FALSE, 8);
}
}
}
}
呼出被调用函数的值是:
setcookie("user[k]", "295f<SNIP>98f2", $time, "/~username/folder/", "localhost");
(实际使用的用户和文件夹的路径信息除外)。
这是显示 setcookie() 返回 true(成功)的调试行。
[15] => Array
(
[message] => COOKIE RESULT
[ref] => SET user[k]=295f<SNIP>98f2
)
因此,除非只有我不知道的数字键有限制,否则我看不出为什么这些 cookie 拒绝设置。
我做错了什么?
编辑
Cookie 可以采用非数字键。
把代码改成
setcookie("user[k]", "295f<SNIP>98f2", $time);
导致 cookie 被设置。但是,这设置的范围太广了。
【问题讨论】:
-
调试:尝试一个非常简单的带有硬编码 html 页面和 cookie 的 php 脚本?您使用的代码可能存在其他问题。它不会花费很长时间,并将确定 cookie 是否是问题?