如何解決Yii2下session跨網域共存的問題
這篇文章主要介紹了Yii2下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下處理這中問題,根據網上搜到的教程最終配置成功教程如下:
在frontend的config資料夾中main.php中設定
$host = explode('.', $_SERVER["HTTP_HOST"]); if (count($host) > 2) { define('DOMAIN', $host[1] . '.' . $host[2]); } else { define('DOMAIN', $host[0] . '.' . $host[1]); } define('DOMAIN_HOME', 'www.' . DOMAIN); define('DOMAIN_USER_CENTER', 'man.' . DOMAIN); define('DOMAIN_API', 'api.' . DOMAIN); define('DOMAIN_EMAIL', 'mail.' . DOMAIN); define('DOMAIN_LOGIN', 'login.' . DOMAIN); define('DOMAIN_IMG', 'img.' . DOMAIN);
然後設定User 和Session:
#'user' => [ 'enableAutoLogin' => true, 'identityCookie' => ['name' => '_identity', 'httpOnly' => true, 'domain' => '.' . DOMAIN], ], 'session' => [ 'cookieParams' => ['domain' => '.' . DOMAIN, 'lifetime' => 0], 'timeout' => 3600, ],
這裡在設定項目的user和session裡我把domain寫死了例如:'domain'=>'.baidu.com',這樣就不用判斷了.
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!
相關推薦:
以上是如何解決Yii2下session跨網域共存的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

問題發現springboot專案生產session-out逾時問題,描述下問題:在測試環境透過改動application.yaml配置session-out,經過設定不同時間驗證session-out配置生效,於是就直接設定了過期時間為8小時發布到了生產環境。然而中午接到客戶反應項目過期時間設定較短,半小時不操作就會話過期需要重複登陸。解決處理開發環境:springboot專案內建Tomcat,所以專案中application.yaml配置session-out是生效的。生產環境:生產環境發布是

session失效通常是由於 session 的生存時間過期或伺服器關閉導致的。其解決方法:1、延長session的生存時間;2、使用持久化儲存;3、使用cookie;4、非同步更新session;5、使用會話管理中介軟體。

PHPSession跨域問題的解決方法在前後端分離的開發中,跨域請求已成為常態。在處理跨域問題時,我們通常會涉及session的使用和管理。然而,由於瀏覽器的同源策略限制,跨域情況下預設無法共享session。為了解決這個問題,我們需要採用一些技巧和方法來實現session的跨域共享。一、使用cookie跨域共享session最常

問題:今天專案中遇到了一個設定時間逾時的問題,按SpringBoot2的application.properties變更一直不生效。解決方案:server.*屬性用於控制SpringBoot所使用的嵌入式容器。 SpringBoot將使用ServletWebServerFactory實例之一來建立servlet容器的執行個體。這些類別使用server.*屬性來配置受控的servlet容器(tomcat,jetty等)。當應用程式作為war檔部署到Tomcat實例時,server.*屬性不適用。它們不適用,

1.基於session實作簡訊登入1.1簡訊登入流程圖1.2實作發送簡訊驗證碼前端請求說明:說明請求方式POST請求路徑/user/code請求參數phone(電話號碼)回傳值無後端介面實作:@Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1.校驗手機號碼if

JavaScriptCookie使用JavaScriptcookie是記住和追蹤偏好、購買、佣金和其他資訊的最有效方法。更好的訪客體驗或網站統計所需的資訊。 PHPCookieCookie是儲存在客戶端電腦上的文字檔案並保留它們用於追蹤目的。 PHP透明地支援HTTPcookie。 JavaScriptcookie如何運作?您的伺服器將一些資料傳送到訪客的瀏覽器cookie的形式。瀏覽器可以接受cookie。如果存在,它將作為純文字記錄儲存在訪客的硬碟上。現在,當訪客到達網站上的另一個頁面時

Vue是一種流行的JavaScript框架,用於建立現代化的Web應用程式。在使用Vue開發應用程式時,常常需要與不同的API交互,而這些API往往位於不同的伺服器上。由於跨域安全性策略的限制,當Vue應用程式在一個網域上運行時,它不能直接與另一個網域上的API進行通訊。本文將介紹幾種在Vue中進行跨域請求的方法。 1.使用代理常見的跨域解決方案是使用代理

當您在使用PHP會話(Session)時,有時會發現Session在一個檔案中可以正常讀取,但在另一個檔案中卻無法讀取。這可能會讓您感到困惑,因為會話資料應該可以在整個應用程式中共用。本文將說明如何在多個檔案中正確讀取和寫入PHP會話資料。
