为什么php没有删除javascript设置的cookie


Why is php not removing cookie set by javascript?

我的网站上有一个帖子评论框。

发布评论由javascript处理,js将数据发布到php脚本中,php做与数据库相关的事情,并仅在用户登录时显示确认。如果用户没有登录,php在收到它后会给出not_logedin响应。js显示带有登录页面链接的引导弹出框。

因此,如果用户没有登录,javascript会将输入的注释存储在cookie中,这样登录后用户就不必重新键入注释。像这个

    document.cookie = id + "=" + input_text + "; ";

并且在登录之后,通过读取具有存储的评论文本的cookie来填充评论文本区域。。

到目前为止,一切都很完美,但在php中插入注释后,我正试图像这样删除cookie。,

setcookie($id, "", time()-3600);
print_r($_COOKIE);
exit('<p class="bg-info">Thank you! Your comment has been posted.</p>'); 

但它仍然没有删除cookie,当我重新加载页面时,我用之前插入的评论填充了评论文本区域框,该评论将再次从cookie中读取。,

我该如何解决这个问题?

我甚至试着在php中显示cookie,它由js存储,lke这个

//insert comment in db 
//setcookie($id, "", time()-3600);
print_r($_COOKIE);
exit('<p class="bg-info">Thank you! Your comment has been posted.</p>');  

但它没有显示js设置的cookie,而是在发布评论后显示PHPSSID cookie。,

Array
(
    [PHPSESSID] => c5rc6c8ggg24edg1v2o8hebb20
)

我没有试图删除PHPSSID cookie。,我用js在页面上展示了这一点。像post_comment.php是同一服务器上另一个目录中的另一个文件。

我做错了什么?

简单地说,js正在设置cookie,php应该删除cookie

---------

更新1:

我试着在js中设置cookie时设置路径,比如这个

document.cookie = id + "=" + input_text + "; path=/";

并且在发布cookie之后。,现在我明白了。,

Array
(
    [PHPSESSID] => c5rc6c8ggg24edg1v2o8hebb20
    [4778] => this is comment
)

我的php代码是这样的。,

//insert comment is db                              
setcookie($id, "", time()-3600);
printr($_COOKIE);
exit('<p class="bg-info">Thank you! Your comment has been posted.</p>'); 

但饼干还在。


更新2:这很奇怪。,

如果我尝试在php中设置相同名称的cookie,则会再创建一个cookie。我的php代码。

setcookie($id, "sdf", time()+36000);
printr($_COOKIE);
exit('<p class="bg-info">Thank you! Your comment has been posted.</p>'); 

现在,当我查看broswers cookie管理器时,我看到两个同名的cookie。,

但两者都有不同的内容,其中一个设置为usngjavascript的cookie有用户插入的注释,另一个我们使用php设置的cookie有内容"sdf"。

我不知道怎么可能有两个名字完全相同的饼干,

有线索吗?

您需要确保参数(除了名称和时间,取决于cookie。)在Javascript中设置cookie和在PHP中删除cookie时相同

参数,即名称、路径(值和过期时间可能不同。)

例如

在javascript中设置cookie时,如果你像这样使用

document.cookie = id + "=" + input_text + " ; path=/";

您将路径设置为"/"

然后,在php中删除cookie时,您应该这样设置。

//remove cookie.
setcookie($id, "", time()-36000 , "/");