【问题标题】:How can I preserve session information when redirecting from one subdomain to another?从一个子域重定向到另一个子域时,如何保留会话信息?
【发布时间】:2026-02-02 22:40:01
【问题描述】:

我正在使用 PHP 编程。

我想将 https://abc.example.com/blah1/blah2 重定向到 https://www .example.com/blah1/blah2 但我不想重定向 https://abc.example.com 重定向到 https://www.example.com

是否可以同时保留跨重定向的会话信息?

谢谢。

【问题讨论】:

  • 我希望我正确地编辑了问题。
  • 谢谢。这就是我想要的。我只是不能以新人的身份发布链接-_-

标签: php session redirect subdomain


【解决方案1】:

您可以像现在一样继续使用重定向,但请调整您的 session.cookie_domain 以使用*域(例如 example.com)。您可以通过使用session_set_cookie_params 或在您的php.ini 文件中设置session.cookie_domain(或在php_value 指令之后的.htaccess 文件中)来做到这一点。这应该允许您的会话信息在您网站的所有子域中持续存在。

【讨论】:

  • 如果我只使用没有cookie的会话呢?
  • PHP 中的会话默认使用 cookie 来存储 会话 id。然后,当访问者加载页面时,PHP 使用该 ID 来获取与该会话关联的数据。因此,当您创建会话时,您也在创建一个 cookie,尽管它包含的唯一数据是会话 ID。可以使用没有 cookie 的会话,但是它将会话 ID 作为查询参数传递,这有一些严重的安全漏洞。
【解决方案2】:

如果您使用 cookie 作为会话 ID,则需要为公共域设置 cookie。如果您使用www.example.comfoobar.example.com,则需要为example.com 设置cookie 以使其对www.example.comfoobar 都有效 em>.example.com.

【讨论】:

    【解决方案3】:

    如果你可以使用 apache 的 Redirect 你可以试试

    RedirectMatch /(.+) https://www.domain.com/$1
    

    使用 PHP 会是

    <?php
    
    
        if ($_SERVER['REQUEST_URI'] != "/") {
            header("Location: ".$_SERVER['REQUEST_URI']);
            exit;
        }
    
    ?>
    

    关于会话失效,就像 Gumbo 说的那样,为主域名而不是特定域名发出 cookie。

    【讨论】:

    • REQUEST_URI从不为空。它总是至少以 / 开头。
    • 而且我似乎误解了这个问题。
    【解决方案4】:

    我想说您可以通过将您的 sessionid 发布 (POST) 到一个新域来重定向,并使用您自己的会话处理程序将您的会话数据存储在 mysql 中。

    【讨论】:

      【解决方案5】:

      使用 javascript 重定向。

      【讨论】:

      • 当用户禁用 Javascript 时会发生什么?