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

时间:2014-09-22 04:35:04

标签: javascript php cookies

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

发布评论由javascript处理,js将数据发布到php脚本,php执行与数据库相关的内容并显示确认仅在用户登录时如果用户未登录然后php在收到后给出not_loggedin响应js显示引导弹出在包含登录页面链接的框中。

因此,如果用户未登录,则javascript将输入的评论存储在cookie中,以便在登录用户后不必重新键入评论。喜欢这个

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

并且在登录注释后,通过读取包含存储的注释文本的cookie来填充textarea。

所有这一切都是完美的,但在php中插入评论后我试图删除这样的cookie。,

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

但是它仍然没有删除cookie,当我重新加载页面时,注释textarea框我填充了先前已被删除的评论,该评论再次从cookie中读取。,

我该如何解决这个问题?

我甚至尝试在php中显示由js存储的cookie,这个

//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,它在发表评论后显示PHPSESSID cookie。

Array
(
    [PHPSESSID] => c5rc6c8ggg24edg1v2o8hebb20
)

我不是要删除PHPSESSID 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>'); 

但cookie仍在那里。


更新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管理器时,我看到2个同名的cookie。

但是两者都有不同的内容,设置为javascript的那个有用户注释的评论和我们用上面的php设置的另一个cookie,有内容“sdf”。

我不知道怎么可能有2个完全相同名称的cookie。 ,

任何线索?

1 个答案:

答案 0 :(得分:2)

你需要确保全部 参数(名称和时间除外,具体取决于cookie。)在Javascript中设置Cookie和在PHP中删除Cookie时相同

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

例如。

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

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

您将路径设置为&#34; /&#34;

然后在php中删除cookie时你应该特意设置这样。

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