0
error_reporting(-1); 
session_start(); 
$expire=time()+60*60;
setcookie('categories', $_SESSION['categories'], $expire);

这段代码应该设置一个 Cookie,但它没有,如果 cookie 存在它告诉我未定义的索引,我认为代码没问题...

我把它放在一页,在第二行,在

任何人都知道它为什么不起作用?:秒

更新

现在我将代码向下移动了一点......仍然处于同样的情况,未定义的索引

        $_COOKIE['newcoockievalu'] = json_encode($array);
    setcookie('newcoockievalu', json_encode($array), $expire);

    print "nocookie".($_COOKIE['newcoockievalu']);

这个在这个IF里面

if (!isset($_COOKIE['newcoockievalu']))

更新

更奇怪......它没有给出任何错误,但它“说” isset 总是错误的......但它打印 $_COOKIE['newcoockievalu'] ok....

4

3 回答 3

1

我检查了你的代码,它绝对正确。第二个参数必须是字符串。

请确保从必须是字符串的会话值中设置 cookie 名称类别。然后在下一次重新加载时它会在那里.. :)

于 2012-11-05T11:51:40.333 回答
1

首先,您必须启用错误报告,E_ALL因为您不知道出了什么问题。

根据文档:

setcookie()

如果在调用此函数之前存在输出,则 setcookie() 将失败并返回 FALSE。如果 setcookie() 成功运行,它将返回 TRUE。这并不表示用户是否接受了 cookie。

正确的。它没有。这样您就应该检查浏览器是否可以接受cookies。
好吧,您可以在处理 cookie 之前检查对象的属性cookieEnablednavigator例如,

<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');

?>
于 2012-11-05T12:29:10.257 回答
0

$_COOKIE只会在下一个请求之后填充,而不是在当前请求中。

于 2012-11-05T11:25:30.347 回答