setcookie遇到的坑

  使用setcookie是一个简单的事情,至少在PHP语法中相当简单。

  说下我的情况

  setcookie('key[key]', 'value', time()+10);

  setcookie('key[value]', 'value', time()+10);

  这样的设置cookie的话,在浏览器中是这样显示的
  
  var_dump($_COOKIE)的结果是这样的


  那么我想清除怎么办呢?
  最开始我用setcookie('key', '', time()-1)这种方式是清除不了的。
  然后我用下面的这种方式

foreach ($_COOKIE as $key => $value) {

  setcookie($key, null, time() - 3600);

  if (is_array($value)) {
  foreach ($value as $vKey => $vValue) {
    setcookie($key . '[' . $vKey . ']',  null, time() - 3600);
    }
  }
}
  当然上面第一个setcookie可以放入if的else分支中。

  我遇到的问题还没有说。

  问题是我在laravel里面登录之后使用setcookie函数设置cookie,然后在退出时是使用上面的foreach来清除cookie,那么问题来了,清楚不掉。

  这是为什么呢?而且显示结果如下图



  仔细看发现路径是/admin 怎么会这样呢?
  然后我把上面的foreach修改了一下,修改成如下

foreach ($_COOKIE as $key => $value) {

  setcookie($key, null, time() - 3600, '/');

  if (is_array($value)) {
  foreach ($value as $vKey => $vValue) {
    setcookie($key . '[' . $vKey . ']',  null, time() - 3600, '/'); 
    } 
  }
}
  当我退出时发出了一个get请求,相对路径为/admin/logout

  那么问题是不是出现在这里呢?

  是的,问题就在这里,在5.5的手册中有这么一句

  就是这个path参数设置的问题,当我登录时我设置cookie的path为/,当我退出时我也应该设置cookie的path为/

  手册多多看,BUG少少有!

  为了真理, 为了正义!



  

posted @ 2015-09-06 20:34  祥子爱游戏  阅读(624)  评论(0编辑  收藏  举报