Yii2下session跨域名共存的解決方案
前面談過session相關(guān)配置,在開發(fā)的時候,常需要跨域共用session的是登錄模塊,我相信很多開發(fā)的朋友的都遇到過,只需要一個地方登錄,相關(guān)聯(lián)的網(wǎng)站也是處于登錄狀態(tài)。兩種情況:一種9streets.cn和a.9streets.cn之間,另一種是a.com b.com之間,這幾天總結(jié)了一下處理方法。
無論是一二級域名,和不同域名下的跨域,無非要達到兩點:
- 客戶端訪問同一個sessionId,
- 所有域名對應的服務器訪問的session的數(shù)據(jù)的位置必須一致。
1.訪問共同的sessionId主要是通過把當前的sessionId寫進cookie里面
cookie在不同域名下是不能訪問的,我們需要在訪問在后臺設置用戶在登錄的時候,把需要共用的登錄信息的域名,如果是在1,2級域名下,直接把cookie設置為所屬主域名,例如:
setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".a.com");
也許你會問:如果是在不同的域名呢?采用P3P技術(shù)簡單解決,實現(xiàn)原理,在訪問網(wǎng)站x.com的時候,y.com程序觸發(fā)y.com文件的寫入sessionid值,sessionid值便可以獲取,然后把seesion值存入數(shù)據(jù)庫,取相同的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數(shù)據(jù)存儲位置一致的實現(xiàn)方法
session該數(shù)據(jù)默認情況下是存放在服務器的tmp文件下的,是以文件形式存在,而非存儲在服務器的內(nèi)存中,在這里我們得修改為所有域下都能訪問的方式。網(wǎng)上介紹了數(shù)據(jù)庫存儲,文件形式存儲,內(nèi)存存儲, 如果用數(shù)據(jù)庫存儲session數(shù)據(jù),網(wǎng)站的訪問量很大的話,SESSION 的讀寫會頻繁地對數(shù)據(jù)庫進行操作,效率就會明顯降低,可以考慮存在內(nèi)存服務器來實現(xiàn),下面的session.rar里面介紹的是數(shù)據(jù)庫存session的實例。
在yii2下 處理這中問題,根據(jù)網(wǎng)上搜到的教程 終配置成功教程如下:
在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',這樣就不用判斷了.
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- yii操作session實例簡介
- Yii框架用戶登錄session丟失問題解決方法
- 解析PHP的Yii框架中cookie和session功能的相關(guān)操作
- Yii2.0中的COOKIE和SESSION用法
- Yii框架操作cookie與session的方法實例詳解
- Yii框架學習筆記之session與cookie簡單操作示例
- Yii框架Session與Cookie使用方法示例
- Yii數(shù)據(jù)庫緩存實例分析
- Yii操作數(shù)據(jù)庫的3種方法
- 解析yii數(shù)據(jù)庫的增刪查改
- Yii2框架數(shù)據(jù)庫簡單的增刪改查語法小結(jié)
- Yii框架 session 數(shù)據(jù)庫存儲操作方法示例
相關(guān)文章
php框架CodeIgniter主從數(shù)據(jù)庫配置方法分析
這篇文章主要介紹了php框架CodeIgniter主從數(shù)據(jù)庫配置方法,結(jié)合實例形式分析了CodeIgniter框架主從數(shù)據(jù)庫配置方法、模型model與控制器調(diào)用操作技巧以及相關(guān)注意事項,需要的朋友可以參考下2018-05-05Thinkphp將二維數(shù)組變?yōu)闃撕炦m用的一維數(shù)組方法總結(jié)
這篇文章主要介紹了Thinkphp將二維數(shù)組變?yōu)闃撕炦m用的一維數(shù)組方法,總結(jié)了常見的轉(zhuǎn)化數(shù)組方法,非常實用,需要的朋友可以參考下2014-10-10Zend Framework教程之響應對象的封裝Zend_Controller_Response實例詳解
這篇文章主要介紹了Zend Framework教程之響應對象的封裝Zend_Controller_Response用法,結(jié)合實例形式詳細分析了響應對象的邏輯原理與相關(guān)使用技巧,需要的朋友可以參考下2016-03-03php循環(huán)table實現(xiàn)一行兩列顯示的方法
這篇文章主要介紹了php循環(huán)table實現(xiàn)一行兩列顯示的方法,本文直接給出實現(xiàn)代碼,重點就是在取余方法的運用,需要的朋友可以參考下2015-06-06Laravel框架Eloquent ORM修改數(shù)據(jù)操作示例
這篇文章主要介紹了Laravel框架Eloquent ORM修改數(shù)據(jù)操作,結(jié)合實例形式詳細分析了laravel框架更新數(shù)據(jù)的兩種常見操作技巧,需要的朋友可以參考下2019-12-12