【问题标题】:PHP delete cookie that starts with wp_postpass_PHP删除以wp_postpass_开头的cookie
【发布时间】:2015-10-06 16:38:50
【问题描述】:

我需要为 Wordpress 函数编写一些自定义代码,并且我需要能够删除所有以 wp-postpass_ 开头的 cookie。我知道这可以用 jQuery 完成,但我不确定如何在 PHP 中处理它。

我已经尝试在此处进行谷歌搜索和搜索,但我无法找到与我正在尝试做的事情相匹配的任何内容。

提前谢谢你, 安迪

编辑: 抱歉,我应该提到 Wordpress 会在 wp-postpass_ 的末尾附加一个随机字符串,因此为什么我需要找到任何以 wp-postpass_ 开头的 cookie。抱歉,一大早。

【问题讨论】:

  • 你尝试了什么,给我们看一些代码。
  • 我还没有尝试过任何东西,因为我不知道最好的方法。我在帖子里说过。

标签: php wordpress cookies


【解决方案1】:

所以遍历所有cookie并检查是否包含wp_postpass_然后删除cookie。

foreach($_COOKIE as $cookieKey => $cookieValue) {
    if(strpos($cookieKey,'wp-postpass_') === 0) {
        // remove the cookie
        setcookie($cookieKey, null, -1);
        unset($_COOKIE[$cookieKey]);
    }
}

【讨论】:

  • 只是好奇,这是否也会删除cookie test_wp_postpass_something
  • 是的,因为他检查“wp_postpass_”是否在字符串中,而不是在字符串的开头。 === 0 而不是 !== false
  • 好的,我也试过了,页面资源中的 cookie 似乎仍然有效
  • @AndyHolmes 我编辑了它,现在它也取消了当前页面中的cookie
【解决方案2】:

如果您可以访问 $_COOKIE 超全局变量,请执行此操作

$past = time() - 86400;
foreach($_COOKIE as $name => $value) {
    if(strpos($name, 'wp-postpass_') === 0) {
        setcookie($name, '', $past);
        unset($_COOKIE[$name]);
    }
}

【讨论】:

  • setcookie 函数只是说“发送答案时从浏览器中删除它们”。如果您还想从当前脚本调用中删除它们,则需要添加一点代码行。我也添加了一行要从当前上下文中删除。
  • 也试过了,它还在吗?哈哈
  • 也许是 WP 在后面重新创建了它们。您要么想清除当前上下文,要么将它们从进一步的请求中删除。
  • 除了 cookie 值和过期日期外,它们是相同的。我很好奇,如果你的解决了这个案子,而我的没有,为什么会这样。
猜你喜欢
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 2014-05-27
  • 1970-01-01
  • 2018-01-21
  • 2016-07-06
  • 2013-03-02
相关资源
最近更新 更多