TP、PHP同域不同子級域名共享Session、單點登錄
目的:
-
為了部署同個域名下不同子級域名共享會話,從而實現單點登錄的問題,一處登錄,同域處處子系統即可以實現自動登錄。
PHP支持通過設置cookie使得同域不同子域共享SESSION
1. 通過在執行PHP的入口文件中設置如下代碼:
- 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
TP5.1同樣也支持配置設置,接下來演示TP如何設置得到共享會話:
-
首先拉取通過下載2個TP5.1項目,然后根據自己的Web環境配置,放到對應的根目錄,可以使用nginx、或者Apache服務。
-
配置2個項目的測試域名,配置hosts文件。
-
刷新hosts生效,然后通過域名。
-
然后在test1.t5.com指向的項目的Index控制器下添加如下代碼。
-
這時候在瀏覽器訪問http://test1.t5.com/,打開調試。
-
然后在修改test2.t5.com指向的目錄下的Index控制器代碼,如下。
-
然后通過瀏覽器訪問。
-
發現是NULL,且sessionID不一致,這時是因為沒有配置導致會話不能共享。
-
TP需要配置2處地方,1處是cookie文件,1處是session文件,2處文件都在config目錄下,這里我使用了Redis來作為共同的會話存儲,也可以使用文件或者數據庫方式,自行配置。cookie.php,session.php配置分別如下,只要配置domain選項即可,兩個項目文件配置均一致。
-
配置完后瀏覽器分別清空之前兩個域名的cookie,可以使用editthiscookie谷歌瀏覽器擴展清除。
-
清除完首先訪問http://test2.t5.com/項目,發現是Null值。
-
接下來訪問http://test1.t5.com/。由此可以發現cookie發送的SessionID一致。
-
最后讓我們再來訪問第二個測試域名,http://test2.t5.com/。
-
由此,測試成功,
這樣子我們就可以通過同域下,不同的子級域名共享會話,解決了同域單點登錄的問題。