2015-12-01 36 views
1

我得到了一些由XYZ开始的cookie,当用户访问特定路由时我想取消它们。删除一个cookie,如果密钥以PHP开头X键

所以我的代码:

foreach ($_COOKIE as $key => $value) 
     if (preg_match('/^XYZ/', $key)) 
      unset($_COOKIE[$key]); 

但饼干仍然存在。 我真的不明白,因为当我这样做:

foreach ($_COOKIE as $key => $value) 
     if (preg_match('/^XYZ/', $key)) 
      echo($_COOKIE[$key]); 

...它的工作原理。所以我想知道是否有可能取消像上面这样的cookies。

+0

为什么使其复杂与'preg_match'如果'substr'会工作也一样(可能更快)? – GolezTrol

回答

2

重置一个cookie,如:

setcookie($key,"",time()-3600); 
+0

谢谢。仍然想知道为什么unset不起作用。 –

+0

因此,这行代码实际上并未取消设置cookie,但会将其重置为空值,尽管我们认为它会取消设置,因为它还会清除Cookie值,所以通过这样做可以取消设置Cookie如你所愿,那就是它......完成 –

0

你可以试试这个 -

foreach ($_COOKIE as $key => $value) { 
    if (strpos($key, 'XYZ') === 0) { // check if name starts with 'XYZ' 
     setcookie($key, "", (time() - 3600)); // Set the time which already expired 
    } 
} 

随着preg_match -

if (preg_match('/^XYZ/', $key)) { 
    setcookie($key, "", (time() - 3600)); 
} 
+0

问题是要删除cookie,你是从阵列$ _COOKIE –

+0

取消设置一些数组元素我首先编码你的代码,但我更喜欢使用preg_match代码的语义。这两种方式都不适用于取消cookie的设置,但适用于回显值。 –

+0

@rickozoe检查更新。 –