不得不说的php setcookie()—记念郁闷的星期五

不得不说,不好好看官方文档下方的邮件列表,吃亏郁闷将是自己的平常态!
先说说自己郁闷的来由吧!

模块:网站购物车
说明:当用户没有登时,将记录保存到cookie;登录之后则转存到用户数据库!
为了防止刷新,将添加到购物车模块专门设计了一个中转的页面,该页面功能很单一,根据传递过来的产品ID,依据登录状态,写入到数据库或者是cookie,代码如下:


$re = defined("VALIDLOGIN") ? $cart->addItem($logininfo['id'], $sn) : $cart->addCookie($sn);
header("Location:  /shopping/index.php?a=viewcart");
exit();

在本地测试OK,但上传到服务器后,却时灵时不灵的,郁闷啊!只好到网上搜索相关的问题,却一直没有找到。然后就是查看官方文档了,但却只是看了看官方的说明,还是不明原因!

晚上回家,心头依然放不下,就又翻起了官方文档,一直往下看,看到了这里,才恍然大悟:


//When setting a cookie on a page that redirects, the cookie must be set after the call to header('Location: ....');
//Such as:

header('Location: http://www.example.com/');
setcookie('asite', $value, time()+60*60, '/', 'site.com');
?>

另外,还发现第二个参数,因为是string类型,如果你设置的值是数字或者其他类型,还是手动加一个引号为好。我这里就是一个整数型,表示需要购买的数量。
再一个就是header()函数里的URL最好是完整的,否则也容易导致问题!

下面就是我修正后的代码,运行OK:


$sn = $_GET['sn'];
if(!preg_match("/^\d{5}$/", $sn)) die('Access Denied.');
if(defined("VALIDLOGIN")){
  $cart->addItem($logininfo['id'], $sn);
  header('Location: /shopping/index.php?a=viewcart');
}else{
  header('Location: http://www.bioscreenorganics.cn/shopping/index.php?a=viewcart');
  $cart->addCookie($sn);
}

心,终于可以放下了,哈!

“不得不说的php setcookie()—记念郁闷的星期五”的2个回复

发表评论