在同一服务器上具有多个子域的PHP会话

时间:2014-12-09 14:44:55

标签: php session dns subdomain

我对PHP Sessions有一些疑问,我可以通过我找到的页面找出答案。

但首先是一些一般信息,我想在一台服务器上创建多个子域,

  

sub1.domain.com - > 10.10.10.10(服务器的IP示例)

     

sub2.domain.com - > 10.10.10.10(服务器的IP示例)

     

sub3.domain.com - > 10.10.10.10(服务器的IP示例)

所有这些子域都可以使用相同的文件,但是他们需要拥有自己的会话,例如,如果我登录了sub1并且我打开了sub2,我需要注销这个子域。

  1. 有人可以解释一下这有用吗?
  2. 如何使用多个服务器(例如循环法),所有服务器是否都知道例如sub1的会话?

1 个答案:

答案 0 :(得分:1)

默认情况下,PHP使用' PHPSESSID' cookie用于跨多个页面传播会话数据,默认情况下,它使用cookie声明中的当前顶级域和子域。

示例:www.domain.com

缺点是会话数据无法与您一起旅行到其他子域。因此,如果您在www.domain.com上开始会话,会话数据将在forums.domain.com上不可用。解决方案是在PHP设置' PHPSESSID'时更改PHP使用的域。 cookie中。

假设您有一个包含在每个PHP页面顶部的init文件,您可以使用ini_set()函数。只需将其添加到初始页面的顶部:

ini_set(' session.cookie_domain',substr($ _ SERVER [' SERVER_NAME'],strpos($ _ SERVER [' SERVER_NAME']," 。"),100));

这行代码占用了域,并从子域中删除。

示例:forums.domain.com - > .domain.com

现在,每次PHP设置' PHPSESSID' cookie,cookie将可用于所有子域名!


你需要

ini_set(" session.cookie_domain"," .mydomain.com");

在任何创建会话cookie的页面上的session.start()函数之前添加它。

或者,您可以添加:

session.cookie_domain = .mydomain.com

到php.ini

请确保在尝试之前清除了Cookie。