使用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少少有!
为了真理, 为了正义!