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。我想知道为什么会这样,如果有人遇到过同样的问题,或者是否有解决这个难题的方法,我在这些 cookie 过期时遇到了问题......

4

3 回答 3

1

根据session_destroy() 的手册

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

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

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

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

于 2012-08-27T01:49:48.860 回答
1

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

于 2012-08-29T03:35:52.547 回答
0

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

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

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

于 2012-08-27T01:52:17.973 回答