摘要:可是,我們的域名有這三個(gè)域名僅僅是不同的環(huán)境,因此,的跨域名訪問就引出來了。無論是一二級域名,和不同域名下的跨域,無非要達(dá)到兩點(diǎn)客戶端訪問同一個(gè)所有域名對應(yīng)的服務(wù)器訪問的的數(shù)據(jù)的位置必須一致。
關(guān)閉httponly引起的問題
場景1:
測試A:咦,為什么test環(huán)境登錄不了呢?
程序員:清緩存。
測試B:握草,dev也登錄不了。。。誰看看!
程序員:清緩存。
測試們:。。。唉
場景2:
程序員A:我靠,TNND,真的登錄不了,怎么回事?
程序員B:可能還是要請緩存。
程序員A:沒用。
程序員B:我看看吧。
一陣搗鼓后,呀,cookie中怎么會有兩個(gè)sessionID呢?
這件事情的起因是這樣的,前端工程師需要拿取后臺管理員的cookie,用牛叉的控制臺就可以看到:document.cookie,結(jié)果沒有取到,再看看cookie管理器,顯示是httponly為true,即開啟了path=/;httponly,這個(gè)是yii2防止XSS攻擊所設(shè)置的。
但是,前端工程師需要這個(gè)cookie信息,所以配置中開啟了session的cookieParams參數(shù)。
"session" => [ "class" => "yii edisSession", "redis" => "redis3", "name" => "SID", "useCookies" => true, "cookieParams" => [ "domain" => ".xxx.com", "httpOnly" => false, ], ],
這樣就可以獲取到cookie中保存的sessionID了,感覺沒有任何問題。
可是,我們的域名有:admin-test.xxx.com,admin-dev.xxx.com,admin.xxx.com,這三個(gè)域名僅僅是不同的環(huán)境,因此,yii2的跨域名訪問就引出來了。
那么上面問題如何解決呢?很簡單,domain這個(gè)參數(shù)默認(rèn)是當(dāng)前的域名,如果只允許當(dāng)前域名登錄訪問,使用默認(rèn)即可。
"session" => [ "class" => "yii edisSession", "redis" => "redis3", "name" => "SID", "useCookies" => true, "cookieParams" => [ "httpOnly" => false, ], ],
看到網(wǎng)上大致有很多這樣的做法:
"user" => [ "class" => "ackendextensionsAdmin", "identityClass" => "ackendmodelsAdmin", "enableAutoLogin" => false, "enableSession" => true, "loginUrl" => ["admin/login"], "identityCookie" => ["httpOnly" => false, "domain" => ".xxx.com"], ],
也就是把用戶的cookie中的httphttponly關(guān)閉,并且指定具體的域名,最燃這樣做了,但還是不能關(guān)閉客戶端的cookie的httponly,依然獲取不到cookie的值,建議這里的httponly一定為true。
附加:處理session跨域幾種的方案前面談過session相關(guān)配置,在開發(fā)的時(shí)候,常需要跨域共用session的是登錄模塊,我相信很多開發(fā)的朋友的都遇到過,只需要一個(gè)地方登錄,相關(guān)聯(lián)的網(wǎng)站也是處于登錄狀態(tài)。兩種情況:一種9streets.cn和a.9streets.cn之間,另一種是a.com b.com之間,這幾天總結(jié)了一下處理方法。
無論是一二級域名,和不同域名下的跨域,無非要達(dá)到兩點(diǎn):
客戶端訪問同一個(gè)sessionId,所有域名對應(yīng)的服務(wù)器訪問的session的數(shù)據(jù)的位置必須一致。
1.訪問共同的sessionId主要是通過把當(dāng)前的sessionId寫進(jìn)cookie里面cookie在不同域名下是不能訪問的,我們需要在訪問在后臺設(shè)置用戶在登錄的時(shí)候,把需要共用的登錄信息的域名,如果是在1,2級域名下,直接把cookie設(shè)置為所屬主域名,例如:
setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".a.com");
也許你會問:如果是在不同的域名呢?采用P3P技術(shù)簡單解決,實(shí)現(xiàn)原理,在訪問網(wǎng)站x.com的時(shí)候,y.com程序觸發(fā)y.com文件的寫入sessionid值,sessionid值便可以獲取,然后把seesion值存入數(shù)據(jù)庫,取相同的sessionid值便可。這就要求y.com里面的程序文件必需能跨域訪問,默認(rèn)情況下,瀏覽器是不能跨域設(shè)置cookie的,加上p3p頭后才行。在對應(yīng)php文件加上:header("P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"");。
2.session數(shù)據(jù)存儲位置一致的實(shí)現(xiàn)方法
session該數(shù)據(jù)默認(rèn)情況下是存放在服務(wù)器的tmp文件下的,是以文件形式存在,而非存儲在服務(wù)器的內(nèi)存中,在這里我們得修改為所有域下都能訪問的方式。網(wǎng)上介紹了數(shù)據(jù)庫存儲,文件形式存儲,內(nèi)存存儲, 如果用數(shù)據(jù)庫存儲session數(shù)據(jù),網(wǎng)站的訪問量很大的話,SESSION 的讀寫會頻繁地對數(shù)據(jù)庫進(jìn)行操作,效率就會明顯降低,可以考慮存在內(nèi)存服務(wù)器來實(shí)現(xiàn),下面的session.rar里面介紹的是數(shù)據(jù)庫存session的實(shí)例。
yii2中如何實(shí)現(xiàn)呢?
main.php中應(yīng)該這般配置(同一套環(huán)境不會出現(xiàn)前面所說的問題,但是不同環(huán)境還會出現(xiàn)):
"user" => [ "class" => "ackendextensionsAdmin", "identityClass" => "ackendmodelsAdmin", "enableAutoLogin" => false, "enableSession" => true, "loginUrl" => ["admin/login"], "identityCookie" => ["name" => "_identity", "httpOnly" => true, "domain" => ".xxx.com"], ], "session" => [ "class" => "yii edisSession", "redis" => "redis3", "name" => "SID", "useCookies" => true, "cookieParams" => [ "httpOnly" => false, "domain" => ".xxx.com", "lifetime" => 0 ], ],
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30550.html
摘要:例如,淘寶登錄的,登錄成功的。所以思考如何實(shí)現(xiàn)這種跨域的登錄就顯得尤為重要了。需求分析進(jìn)入登錄頁面的地址登錄成功后跳轉(zhuǎn)的地址下面我主要是以框架為例解說一下我是怎么實(shí)現(xiàn)這種跨越的登錄的。 序言 近年來網(wǎng)絡(luò)發(fā)展很快,參與網(wǎng)購的人越來越多,但是大家在網(wǎng)購的時(shí)候不知到有沒有注意到無論是淘寶還是京東,他們用的都是二級域名,登錄一個(gè)URL,登錄成功后又是一個(gè)URL,作為一個(gè)開發(fā)者反正我是注意到了。...
摘要:例如,淘寶登錄的,登錄成功的。所以思考如何實(shí)現(xiàn)這種跨域的登錄就顯得尤為重要了。需求分析進(jìn)入登錄頁面的地址登錄成功后跳轉(zhuǎn)的地址下面我主要是以框架為例解說一下我是怎么實(shí)現(xiàn)這種跨越的登錄的。 序言 近年來網(wǎng)絡(luò)發(fā)展很快,參與網(wǎng)購的人越來越多,但是大家在網(wǎng)購的時(shí)候不知到有沒有注意到無論是淘寶還是京東,他們用的都是二級域名,登錄一個(gè)URL,登錄成功后又是一個(gè)URL,作為一個(gè)開發(fā)者反正我是注意到了。...
摘要:系統(tǒng)從認(rèn)證中心得到校驗(yàn)成功的結(jié)果后,則可以認(rèn)為用戶已登錄。認(rèn)證中心發(fā)現(xiàn)用戶未登錄沒有,將用戶引導(dǎo)至登錄界面。用戶提交登錄信息到認(rèn)證中心。 簡單登錄 登錄流程 首先讓我們分析一下一個(gè)簡單的登錄是怎么實(shí)現(xiàn)的。 一個(gè)簡單的登錄流程 用戶輸入url訪問站點(diǎn),接受用戶請求后判斷用戶是否已經(jīng)登錄,若未登錄則跳轉(zhuǎn)到登錄頁面 用戶訪問登錄頁面,填寫并提交登錄表單 web應(yīng)用對登錄表單進(jìn)行驗(yàn)證,若...
摘要:說明測試使用的接口域名,多域名為和。設(shè)置多域名嘗試直接通過的模塊追加值實(shí)現(xiàn),如下接口請求和響應(yīng)頭如下當(dāng)前域?yàn)椋杩缬蛘埱蟮馁Y源。故通過該方法不能設(shè)置多域名進(jìn)行。 首發(fā)于 樊浩柏科學(xué)院 平常我們遇到跨域問題時(shí),常使用 cors(Cross-origin resource sharin)方式解決。不知你是否注意到,在設(shè)置響應(yīng)頭 Access-Control-Allow-Origin 域的...
摘要:序言本文主要是對關(guān)于如何實(shí)現(xiàn)跨域的登錄的解析的改進(jìn),因?yàn)樵谀瞧恼轮形乙呀?jīng)寫出了登錄的基本實(shí)現(xiàn)過程,現(xiàn)在是進(jìn)一步優(yōu)化。實(shí)現(xiàn)永久登錄狀態(tài)。只要不點(diǎn)擊退出登錄,就一直保持著登錄狀態(tài)。存在時(shí),提交表單判斷修改的過期時(shí)間,設(shè)置到極大值。 序言 本文主要是對關(guān)于Yii2如何實(shí)現(xiàn)跨域的SSO登錄的解析的改進(jìn),因?yàn)樵谀瞧恼轮形乙呀?jīng)寫出了SSO登錄的基本實(shí)現(xiàn)過程,現(xiàn)在是進(jìn)一步優(yōu)化。主要優(yōu)化的部分有兩...
閱讀 3014·2020-01-08 12:17
閱讀 1999·2019-08-30 15:54
閱讀 1156·2019-08-30 15:52
閱讀 2040·2019-08-29 17:18
閱讀 1051·2019-08-29 15:34
閱讀 2466·2019-08-27 10:58
閱讀 1867·2019-08-26 12:24
閱讀 374·2019-08-23 18:23