Yii2下session跨網域名稱共存的解決方案

來源:互聯網
上載者:User
前面談過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',這樣就不用判斷了.

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援topic.alibabacloud.com。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.