亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

thinkphp3.2如何多域名共享session

thinkphp3.2如何多域名共享session

鳳凰求蠱 2018-12-31 01:00:01
thinkphp3.2如何多域名共享session
查看完整描述

1 回答

?
MMMHUHU

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]
---------------------


查看完整回答
反對 回復 2019-01-16
  • 1 回答
  • 0 關注
  • 1480 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號