PHP实现同服务器多个二级域名共享 SESSION
現在很多分類信息網站都會分出很多個二級域名出來,比如:sh.ganji.com(上海趕集網), su.ganji.com(蘇州趕集網)等等,像這種擁有多個二級域名的網站,該如何實現同步共享session呢,這里不討論在多個服務器上的問題,僅僅分享一下在同一個服務器上面的多個二級域名網站如何共享session。
說這個問題之前,先來了解一下 PHP 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。這里我們主要以 COOKIE 方式進行說明,因為應用比較廣泛。
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 變量。
通過了解php session的工作原理,這里我們就可以有兩種方法解決session共享的問題了。
(1)利用COOKIE存放session_id();
?
域名一文件php代碼:
域名二文件php代碼:
<?php session_destroy(); session_id($_COOKIE['session_id']); session_start(); echo $_SESSION['user_name']; ?>(2)利用php.ini 的session.cookie_domain
?
備注:這里是用php代碼實現不需要修改php.ini的配置文件;如果有需要你可以在php.ini里面修改配置文件(該情況下就不需要改段代碼:ini_set("session.cookie_domain",'session.com');)
?
域名一文件php代碼:
域名二文件php代碼:
<?php ini_set("session.cookie_domain",'Alixixi.com'); session_start(); echo $_SESSION['user_name']; ?>下面是兩個需要注意的問題:
?
一:ini_set("session.cookie_domain",'session.com');必須放在session_start()之前;
?
二:在某些網站測試的時候必須得注意,或許你本地沒有問題,但是在其他機器上或者服務器上有問題,那么你需要檢查ini_set("session.cookie_domain",'session.com');這個中的session.com中必須與你的域名 進行真實匹配!不然你的部分session值將會出現問題的!
轉載于:https://www.cnblogs.com/sanwenyu/p/4589089.html
總結
以上是生活随笔為你收集整理的PHP实现同服务器多个二级域名共享 SESSION的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系统怎么刻录到u盘 系统教程:U盘刻录方
- 下一篇: I2C驱动程序框架probe道路