1 回答

TA貢獻1834條經驗 獲得超8個贊
要實現多域名共享session,首先就得了解SESSION的運行機制?;靖拍钗揖筒徽f了。
session是這樣運行的:
用戶A訪問站點Y,如果站點Y執行了session_start();(以下假定session_start()總是存在)那么會產生一個 session_id,這個session id一般會以COOKIE的形式保存到用戶A(我們可以通過在php.ini里設置session.use_only_cookies為1,強制SESSION ID必須以COOKIE傳遞。)。這時候SESSION ID表現為$_COOKIE[’PHPSESSID’];(PHPSESSID可用session_name()函數來修改)
用戶A接著訪問,這個session id($_COOKIE[’PHPSESSID’])就會在A每次訪問Y的時候傳送到站點Y。
在站點Y上,會有這么一個目錄,是用來保存SESSION的實際數據的。站點Y接收到session id,然后通過session id,來獲得與SESSION數據的關聯,并返回SESSION數據。
可能聰明的你已經想到了,既然服務器端和客戶端之間的SESSION是通過一個SESSION ID來聯系,并且SESSION數據是以普通文件的形式保存在一個特定的文件夾里。
那么我們要實現不同域名,只需要滿足以下兩個條件:
[color=Red]1)不同域名的SESSION數據目錄統一到一起,或者同步更新。
2)對同一個客戶,使用統一的一個SESSION ID [/color]
[color=Green]第一個條件的實現。
如果是同一臺服務器,就不需要進行任何設置了。
如果是集群/分布式的,那么我想也不需要我來說了。。能做分布式應用的,在目錄共享方面的經驗應該比我豐富。我也沒有進行過多服務器的測試,主客觀條件的原因都有。
我在這里主要是想說一下第二個條件――使不同的域名,擁有統一的SESSION ID。
那我們應該怎么統一呢?
首先必須在不同域名之間傳遞這個SESSION ID,且由于 cookie必須是針對域名的,所以傳遞動作是由客戶端來完成。如果傳遞過程不是由客戶端來完成,那么接受傳遞的域名就不知道針對的是哪個客戶。
其次就是修改接受傳遞的域名下的SESSION ID。[/color]
---------------------
- 1 回答
- 0 關注
- 1480 瀏覽
添加回答
舉報