我对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,我需要注销这个子域。
答案 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。