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

时间:2013-09-02 04:58:59

标签: php session logout

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

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

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

1 个答案:

答案 0 :(得分:1)

不要使require包含“退出成功”内容,而是执行Header("Location: http://domain/path-to-logout-success.php")

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