session数据都是保存在本服务器的文件系统中,要想共享session,就必须实现两个目标:
1:各个服务器对同一个客户端产生的sessionID必须相同,并且可以通过同一个cookie进行传递,也就是说各个服务器可以读取同一个名为session ID的cookie。
2:存储session数据的位置/目录必须保证每个服务器都能够访问到。
这两个目标简单来说就是:各个服务器共享同一个sessionID,各个服务器能够访问同一份session数据。
这里有三种方式可以实现:
1.只要在php页面的最开始(要在任何输出之前,并且在session_start()之前)的地方进行以下设置
ini_set('session.cookie_path', '/');
ini_set('session.cookie_domain', '.mydomain.com');
ini_set('session.cookie_lifetime', '1800');
2.在php.ini里设置
session.cookie_path = /
session.cookie_domain = .mydomain.com
session.cookie_lifetime = 1800
3.在php页面最开始的地方(条件同1)调用函数
session_set_cookie_params(1800 , '/', '.mydomain.com');
这里我用第一种方法设置,分别在www.mydomain.com和sub.mydomain.com两个域名来测试,测试代码如下
sub1.php
<?php
//先访问的页面做设置
ini_set('session.cookie_path', '/');
ini_set('session.cookie_domain', '.mydomain.com');
ini_set('session.cookie_lifetime', '1800');
//
session_set_cookie_params(1800 , '/', '.mydomain.com');
session_start();
$_SESSION['sub1'] = 'sub1';
print_r($_SESSION);
?>
sub2.php
<?php
session_set_cookie_params(1800 , '/', '.mydomain.com');
session_start();
$_SESSION['sub2'] = 'sub2';
print_r($_SESSION);
?>
访问顺序:
(1)www.mydomain.com/sub1.php
页面输出:
Array ( [sub1] => sub1 )
(2)sub.mydomain.com/sub2.php
页面输出:
Array ( [sub1] => sub1 [sub2] => sub2 )