PHP 无法删除由 JavaScript 设置的 cookie

Posted

技术标签:

【中文标题】PHP 无法删除由 JavaScript 设置的 cookie【英文标题】:PHP can't remove cookie that was set by JavaScript 【发布时间】:2013-02-21 13:00:17 【问题描述】:

是否可以通过 JS 和 php 移除前面设置的 cookie?

我正在这样做:

*前(JS):

if ($.cookie('myCookie'))

   console.log('Cookie.. :(  ');

else

    console.log('Yaay! No cookie!');
    $.cookie('myCookie', '123');

返回(PHP):

if (isset($_REQUEST['removeCookie']))

   setcookie("myCookie", "", time()-3600);
   unset($_COOKIE['myCookie']);

结果:

好像是个谜

【问题讨论】:

在调试器的cookies 标签下显示什么? 先运行什么代码?你是在js运行后发出php请求吗? 如果你做 var_dump($_COOKIE);在你的 PHP 中,追加了什么? @DreamEater 我在 Cookie 选项卡中看到 cookie。 cookie 名称中的点被替换为 _ 字符 - 这可能会导致一些问题 【参考方案1】:

有人可以在测试机器上运行这段代码吗?我有点困惑,为什么 cookie 可以“取消设置”但不能在 php 中更改值或过期等,似乎 setcookie() 根本不起作用.

<script type="text/javascript" src="jquery.js"></script>
<script src="jquery.cookie.js"></script>
<script>
   $.cookie('myCookie', '123' ,'/');
   console.log("Created myCookie");
</script>
<?php
   echo $_COOKIE['myCookie'];
   //Comment/uncomment below as required
   //setcookie("myCookie", "BLAH", time()-430000);
   //$_COOKIE['myCookie'] = "BLAH";
   setcookie('myCookie', '', 1, '/');
   echo "<br />unset myCookie";
   echo "<br />".$_COOKIE['myCookie'];
?>
<script>
console.log($.cookie('myCookie').length);
if ($.cookie('myCookie').length>0)

   console.log('Cookie exists  ');
   console.log($.cookie('myCookie'));

else

    console.log('Yaay! No cookie!');

</script>

您似乎能够创建一个 php JS cookie 不匹配,即:2 个 cookie 调用完全相同但存储不同的数据。

【讨论】:

显然减号不是必需的。 如果他想使 cookie 过期,这个代码 sn-p 将不起作用。他的检查是在 javascript 中,而不是在 PHP 中,所以在 PHP 中取消设置变量将无济于事。 因为 cookie 是客户端并且 php 可以请求 cookie 数据,所以完全可以取消设置 php cookie 和 jquery 生成的 cookie。运行测试后,有一个有趣的事情是执行 unset($_COOKIE['mycookie']) 然后回显 mycookie 的内容除了在 jquery 中执行 .length 仍然返回 3 的长度,所以当 cookie 被填充时在 javascript 中,但不再在 php 中,这在理论上是不可能的 oO。【参考方案2】:

这将取决于用户 PC 在超时后删除 cookie。就个人而言,我不会相信这一点。我将cookie设置为空值,或将其设置为DELETED,然后在您的测试代码中检查它是否已设置,然后检查该值是否为空或DELETED

【讨论】:

【参考方案3】:

您不能强制浏览器删除 cookie 文件。但是,您可以删除 cookie 的内容并将其过期。这正是您对上面的代码所做的事情。我可能会稍微调整一下:

setcookie('myCookie', '', 1, '/'); // no need to calculate one hour ago.

【讨论】:

事情就是这样。我可以坚持使用浏览器,但由于应用程序结构的原因,如果我可以使用 PHP 的话会更容易【参考方案4】:

如果客户端时间错误,使用 time() 函数设置 cookie 过期可能无法正常工作。

尝试取消设置 cookie,

setcookie('myCookie', 'blah blah', 1);

来源:A Comment in php setcookie docs

【讨论】:

【参考方案5】:

要通过 PHP 从浏览器中完全删除 cookie,试试这个代码

$name = 'exists_cookie';
unset($_COOKIE[$name]);
  // Set empty value
$blank = setcookie($name, '', time() - 3600);

【讨论】:

以上是关于PHP 无法删除由 JavaScript 设置的 cookie的主要内容,如果未能解决你的问题,请参考以下文章

删除 PHP 中的所有 REAL Javascript 注释

如何删除或取消设置 Javascript 变量 [重复]

PHP 被设置为移除内联块,这将导致多个核心应用无法访问。 这可能由缓存/加速器导致的,例如 Zend OPcache 或 eAccelerator。

Zend Framework,FusionCharts,PHP,Javascript

无法使用 Excel JavaScript API 设置 NumberFormat

本地存储由 .php 脚本递增的 javascript 变量