如何在同一台服务器上跨多个域维护 PHP 会话?

Posted

技术标签:

【中文标题】如何在同一台服务器上跨多个域维护 PHP 会话?【英文标题】:How do I maintain PHP sessions across multiple domains on the same server? 【发布时间】:2010-09-19 15:07:29 【问题描述】:

我正在寻找一种在同一服务器上跨多个域维护 php 会话的方法。我将把我的网站与一个简单机器论坛集成,所以我需要使用基于 mysql 的会话。谢谢!

【问题讨论】:

【参考方案1】:

根据您修改 PHP 变量的首选方法(Apache 的配置,.htaccess),将 session.cookie_domain 值更改为一致的值。

我有多个子域,Apache 配置文件中的每个 VirtualHost 部分都包含以下行:

php_value session.cookie_domain mydomain.com

如果您在 .htaccess 文件中进行更改,语法应该类似。

更新了 bobert5064 的评论:

对于多个域(即domain1.com、domain2.org),我认为只需要选择一个通用域名(即domain1.com)即可。我从来没有尝试过,所以我无法验证它是否有效,但逻辑似乎是准确的。

在http://us.php.net/manual/en/function.session-set-cookie-params.php 中描述的PHP 中还有一种设置变量方向的方法。该文档没有提及在不同域上设置 cookie 的能力或不能力。

【讨论】:

问题是我使用了多个不同的 URL,而不是子域。即 domain1.com domain2.com【参考方案2】:

如果一个站点要转发或链接到第二个站点,它可以在链接的 href 中包含会话 ID,或者在表单中作为 输入。类似于 George 的 img 标记 方法,但会话仅在需要时才会移动。

哪个最好取决于您网站的使用模式。

【讨论】:

以上是关于如何在同一台服务器上跨多个域维护 PHP 会话?的主要内容,如果未能解决你的问题,请参考以下文章

多个服务器如何通过维护相同的用户会话来处理 Web 应用程序请求。?

当 Rails 中的同一域上存在会话时,如何在 PHP 中创建会话?

在同一域中具有多个 Laravel 实例时的会话/cookie 错误

在 Elastic Beanstalk 中维护会话

Passport js 无法跨域维护会话

在同一 SQL.Server 上跨 2 个数据库加入时的 COLLATE 问题