【问题标题】:php session cookie with different domain name for http and https用于http和https的具有不同域名的php会话cookie
【发布时间】:2015-03-27 20:45:41
【问题描述】:

我使用由我无权访问的团队管理的自定义会话代码管理网站(单页应用程序)。该应用程序是使用 appweb 定制构建的,与任何其他公共托管网站不同。此应用程序已在 http 和 https 中提供。在登录 http 后,如果用户登录 https,则尽管有以下代码,但未设置安全属性。

$https = $_SERVER['SERVER_PROTOCOL'] == 'https' ? 1 : 0;
ini_set("session.cookie_secure", $https);
//or
session_set_cookie_params(0, '/', null, $https, 1);

所以,我用上面的代码覆盖了会话 cookie,如下所示。它奏效了。

$sessname = session_name();
setcookie($sessname, $_COOKIE[$sessname], 0, '/', null, $https, 1);

异常是在两个选项卡中同时打开 http 和 https 时,这会导致自定义代码的会话无效。虽然这是一种消极的情况,但如果用户喜欢上述情况,可能会导致用户感到困惑。

我知道还有其他选项可以规避这一点,我一直在使用重定向之类的选项。但是我想检查一下我的替代品是否有效。

现在我一直在想的替代方案如下。

$https = $_SERVER['SERVER_PROTOCOL'] == 'https' ? 1 : 0;
$sessname = session_name();
$domain = $_SERVER['SERVER_PROTOCOL'].'.'.$_SERVER['REMOTE_ADDR'];
setcookie($sessname, $_COOKIE[$sessname], 0, '/', $domain, $https, 1);

在这里,我为相同的会话 ID 为 http 和 https 设置了不同的域名。登录 http 时,php 会话 id 的域为 http.10.10.10.1,登录 https 时,php 会话 id 的域设置为 https.10.10.10.1。它正在工作。

这是正确的方法。会有副作用吗?

【问题讨论】:

    标签: php https session-cookies setcookie


    【解决方案1】:

    为什么不直接将每个 http 请求重定向到 https?使用 PHP 或 htaccess:

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    

    否则,我想你可能想看看那些类似的问题:
    Session lost when switching from HTTP to HTTPS in PHP
    Switching between HTTP and HTTPS pages with secure session-cookie
    Cookie across HTTP and HTTPS in PHP

    【讨论】:

    • 如果可能的话,我一开始就不会问这个问题。忘了它。抱歉,我没有在问题中提到这一点。好难过。现在它就在那里。
    • 你看过类似的问题吗?有什么帮助吗?
    • 你没有回答我的问题。第三种在这里不适用。代码库不同,因此不能应用前两个。我的替补呢?
    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2020-08-17
    相关资源
    最近更新 更多