參考自 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>";