PHP中的Cookie未设置

时间:2012-11-05 11:19:37

标签: php cookies setcookie

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']确定....

3 个答案:

答案 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只会在下一个请求后填充,而不会在当前请求中填充。