<?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()
和所有。检查这在火狐中是否有帮助。