我的网站上有一个帖子评论框。
发布评论由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 , "/");