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