我有一个网页,在登录时切换到HTTPS,并在注销时返回HTTP。为了增强安全性,会话cookie在登录时设置为安全(HTTPS)。我的注销页面是pretty standard,具有以下代码:
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。
这意味着setcookie
和session_destroy
可能会对新会话而不是旧会话采取行动。我更担心驻留在我的服务器中的旧会话数据可能无法正常销毁。
在这种情况下,如何编写HTTP注销页面以确保旧会话数据真正被销毁?
答案 0 :(得分:1)
不要使require
包含“退出成功”内容,而是执行Header("Location: http://domain/path-to-logout-success.php")
。
一旦发生HTTPS协商,您就无法为“其他”协议设置cookie。只有当用户的浏览器请求“其他”协议时,才能为其设置cookie。