如何从https到http进行正确的会话注销


How to do a proper session logout from https to http?

我有一个网页,登录时切换到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");

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

这意味着CCD_ 2和CCD_。我更担心的是,驻留在我的服务器中的旧会话数据可能无法正确销毁。

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

与其执行require以包含"注销成功"内容,不如执行Header("Location: http://domain/path-to-logout-success.php")

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