error_reporting(-1);
session_start();
$expire=time()+60*60;
setcookie('categories', $_SESSION['categories'], $expire);
这段代码应该是设置一个Cookie,但它没有,在一个IF cookie存在它告诉我未定义的索引,我认为代码是好的...
我把它放在一个页面中,在第二行后面
任何人都知道它为什么不起作用? :■
更新
现在我把代码移动了一点...... 仍处于相同情况,未定义索引
$_COOKIE['newcoockievalu'] = json_encode($array);
setcookie('newcoockievalu', json_encode($array), $expire);
print "nocookie".($_COOKIE['newcoockievalu']);
这里面的IF
if (!isset($_COOKIE['newcoockievalu']))
更新
更奇怪......它没有给出任何错误,但它'说'isset总是假的......但它打印$ _COOKIE ['newcoockievalu']确定....
答案 0 :(得分:1)
我检查了你的代码,绝对正确。第二个参数必须是字符串。
请确保从会话值设置cookie名称类别,该值必须是字符串。然后在下次重新加载时它会在那里.. :))
答案 1 :(得分:1)
首先,您必须启用向E_ALL
的错误报告,因为您不知道出了什么问题。
根据文件:
setcookie()
如果在调用此函数之前存在输出,则setcookie()将失败 并返回FALSE。如果setcookie()成功运行,它将返回 真正。这并不表示用户是否接受了cookie。
右。它没有。因此,您应该检查浏览器是否可以接受cookie
好吧,在处理cookie之前,您可以检查cookieEnabled
对象的属性navigator
。例如,
<script type="text/javascript">
if ( ! navigator.cookieEnabled ){
//Cookies disabled
//Do something like redirect to error page...
}
</script>
<?php
// After you fix the problem, set this one to 0
error_reporting(E_ALL);
session_start();
function _setcookie($override = false){
$key ='categories';
$val = $_SESSION['categories'];
$expire=time()+60*60;
//Did the one set before?
if ( isset($_COOKIE[$key]) ){
if ( $override ){
//setcookie again here
}
} else {
//Cookie wasn't defined so we'll do define:
return setcookie($key, $value, $expire);
}
}
function _getcookie($key){
if ( isset($_COOKIE[$key]) ){
return $_COOKIE[$key];
}
return null;
}
//Will set cookie if it doesn't not exists
_setcookie();
//Should print that key
print getcookie('categories');
?>
答案 2 :(得分:0)
$_COOKIE
只会在下一个请求后填充,而不会在当前请求中填充。