【问题标题】:How to do a proper session logout from https to http?如何从 https 到 http 进行正确的会话注销?
【发布时间】:2013-09-02 04:58:58
【问题描述】:

我有一个网页在登录时切换到 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 注销页面进行编码以确保旧会话数据真正被销毁?

【问题讨论】:

    标签: php session logout


    【解决方案1】:

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

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

    【讨论】:

    • 啊..你的意思是在重定向之后我仍然将其保留为 HTTPS 注销?
    • 是的。在您执行 session_start() 之前,该页面仍应为 HTTPS。做session_end() 并不能改变这一点。当你重定向到 HTTP 时,要么在那里建立另一个会话,要么什么都不做。
    • 好的,很好的解决方案。我想我会采用它。谢谢:)
    猜你喜欢
    • 2011-03-31
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2011-01-15
    • 2014-01-19
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多