情景再现
目前有两个站点mm.e.com和gg.e.com,我想在mm.e.com下可以访问到gg.e.com下的session。我的mm.e.com和gg.e.com是在同一服务器上的。
注意:如 mm.e.com 的服务器是不能读写 gg.e.com 服务器设置的 COOKIE 的。这里我们所说的同一网站的服务器有其特殊性,那就是他们同属于同一个一级域,如:mm.e.com 和 gg.e.com 都属于域 .e.com,那么我们就可以设置 COOKIE 的域为 .e.com,这样 gg.e.com 、mm.e.com 等等都可以访问此 COOKIE。
利用COOKIE存放session_id()
gg.e.com<?php
session_start();
setcookie("session_id",session_id(),time()+3600,'/','.e.com');
$_SESSION['abc'] = '123';
echo $_SESSION['abc'];
echo 'gg';
mm.e.com<?php
session_id($_COOKIE['session_id']);
session_start();
echo $_SESSION['abc'];
echo 'mm';
利用php.ini 的session.cookie_domain
备注:这里是用php代码实现不需要修改php.ini的配置文件;如果有需要你可以在php.ini里面修改配置文件(该情况下就不需要改段代码:ini_set("session.cookie_domain",'session.com');)
gg.e.com<?php
ini_set("session.cookie_domain", '.e.com');
session_start();
$_SESSION['abc'] = '123';
echo $_SESSION['abc'];
echo 'gg';
mm.e.com<?php
ini_set("session.cookie_domain",'.e.com');
session_start();
echo $_SESSION['abc'];
echo 'mm';
注意
一、ini_set("session.cookie_domain",'.e.com');必须放在session_start()之前;否则将不会生效.
二、有时我们gg.e.com是mm.e.com下的某个目录,此时一定要注意,用来获取gg.e.com的session文件一定要在mm.e.com域名所指向的目录下。不能跳出这个目录.
建议
建议大家先写个demo进行测试session跨域,成功了再应用到相应的地方去。