在 FireFox 14.0.1 中移除 PHP cookie


PHP cookie removal in FireFox 14.0.1

<?php 
session_start();
$_SESSION['logged_in'] = false;
setcookie("dsgpassword127", $password, time()-3600);  /* expire the cookie */
setcookie("dsgemail127", $email, time()-3600);  /* expire the cookie */
session_destroy();
header("location: index.php");
?>

上面的代码在Chrome中运行良好,不会删除FireFox 14.0.1中的cookie。我想知道为什么会这样,如果有人遇到过同样的问题,或者是否有解决我在这个难题时过期这些饼干的方法......

根据 sesion_destroy(( 的手册:

session_destroy(( 销毁与当前会话关联的所有数据。它不会取消设置与会话关联的任何全局变量,也不会取消设置会话 Cookie。...如果使用 Cookie 传播会话 ID(默认行为(,则必须删除会话 Cookie。setcookie(( 可以用于此目的。

很难解释为什么Chrome取消设置cookie,但Chrome的行为似乎是异常的,而不是Firefox的行为。

但是,指向死会话的旧cookie的存在应该没有问题。服务器应该创建一个新会话 - 使用空会话数据 - 并发送回指向新会话的cookie。

事实上,在客户端上保存未加密的用户和密码可能是不明智的。你确定需要吗?将该信息存储在服务器端可能更常见,客户端只为其提供会话cookie。

我卸载了FireFox并重新安装了最新版本15.0。这次当FireFox要求我自动记住密码时,我要求它不要这样做。现在浏览器反应正常。我怀疑在 14.0.1 中关于"记住密码"功能的情况也是如此。

只需将 cookie 过期时间设置为 1,如下所示:

setcookie("dsgpassword127", $password, 1);  /* expire the cookie */
setcookie("dsgemail127", $email, 1);  /* expire the cookie */

基本上第三个参数是自纪元以来的秒数。 1 将其设置为纪元后 1 秒,因此无需担心time()和所有。检查这在火狐中是否有帮助。