0

我有一个网页在登录时切换到 HTTPS,在注销时切换回 HTTP。为了增强安全性,登录时会话 cookie 设置为安全 (HTTPS)。我的注销页面非常标准,具有以下代码:

session_start();

$_SESSION = array();
$params = session_get_cookie_params();
setcookie(session_name(), "", time() - 42000, $params['path'], $params['domain'], $params['secure'], $params['httponly']);

session_destroy();
require("/var/www/include/logout_success.php");

直到最近,当我开始查看响应标头时,我才考虑到其中的含义。现在在我看来,session_start()当页面切换回 HTTP 时调用会创建一个新的会话 cookie,它会覆盖安全 cookie。

这意味着setcookie并且session_destroy可能在新会话而不是旧会话上采取行动。我更担心驻留在我的服务器中的旧会话数据可能无法正确销毁。

在这种情况下,如何对 HTTP 注销页面进行编码以确保旧的会话数据真正被销毁?

4

1 回答 1

1

不要执行 arequire来包含“注销成功”内容,而是执行 a Header("Location: http://domain/path-to-logout-success.php")

一旦发生 HTTPS 协商,您就不能为“其他”协议设置 cookie。只有当用户的浏览器请求“其他”协议时,您才能为其设置 cookie。

于 2013-09-02T05:01:49.953 回答