参考自 http://www.jb51.net/article/19664.htm
下面的步骤只使用于两个域名在同一个服务起得情况下,如果不在一个服务器上,就需要考虑通过数据库来存储session信息,达到同步的目的。
session的运行原理
在客户端(如浏览器)登录网站时,被访问的 PHP 页面可以使用 session_start() 打开 SESSION,这样就会产生客户端的唯一标识 SESSION ID(此 ID 可通过函数 session_id() 获取/设置)。SESSION ID 可以通过两种方式保留在客户端,使得请求不同的页面时,PHP 程序可以获知客户端的 SESSION ID;一种是将 SESSION ID 自动加入到 GET 的 URL 中,或者 POST 的表单中,默认情况下,变量名为 PHPSESSID;另一种是通过 COOKIE,将 SESSION ID 保存在 COOKIE 中,默认情况下,这个 COOKIE 的名字为 PHPSESSID。
SESSION 的数据是保存在服务器端的文件或数据库中。默认情况下,php.ini 中设置的 SESSION 保存方式是 files(session.save_handler=files),即使用读写文件的方式保存 SESSION 数据,而 SESSION 文件保存的目录由 session.save_path 指定,文件名以 sess_ 为前缀,后跟 SESSION ID,如:sess_c72665af28a8b14c0fe11afe3b59b51b。文件中的数据即是序列化之后的 SESSION 数据了。如果访问量大,可能产生的 SESSION 文件会比较多,这时可以设置分级目录进行 SESSION 文件的保存,效率会提高很多,设置方法为:session.save_path=”N;/save_path”,N 为分级的级数,save_path 为开始目录。当写入 SESSION 数据的时候,PHP 会获取到客户端的 SESSION_ID,然后根据这个 SESSION ID 到指定的 SESSION 文件保存目录中找到相应的 SESSION 文件,不存在则创建之,最后将数据序列化之后写入文件。读取 SESSION 数据是也是类似的操作流程,对读出来的数据需要进行解序列化,生成相应的 SESSION 变量。
一、利用COOKIE存放session_id();
1.一级域名下
session_start(); setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".xxx.com"); $_SESSION[‘test‘] = "test1"; echo "<pre>";var_dump($_SESSION);echo "</pre>"; echo "<pre>";var_dump($_COOKIE);echo "</pre>";
2.二级域名下
session_id($_COOKIE[‘session_id‘]); session_start(); echo "<pre>";var_dump($_SESSION);echo "</pre>"; echo "<pre>";var_dump($_COOKIE);echo "</pre>";
二、通过修改php.ini配置同步
修改php.ini 中 session.cookie_domain的值为xxx.com 这样在上面的代码中就不用再写 ini_set("session.cookie_domain",‘xxx.com‘)这行代码;
1.一级域名下
ini_set("session.cookie_domain",‘xxx.com‘) //要在session_start();的前面 session_start(); $_SESSION[‘test‘] = "test1"; echo "<pre>";var_dump($_SESSION);echo "</pre>"; echo "<pre>";var_dump($_COOKIE);echo "</pre>";
2.二级域名下
ini_set("session.cookie_domain",‘Alixixi.com‘); session_start();
echo "<pre>";var_dump($_SESSION);echo "</pre>"; echo "<pre>";var_dump($_COOKIE);echo "</pre>";