在實(shí)際的項(xiàng)目中,歷史項(xiàng)目使用thinkphp3.2開(kāi)發(fā),現(xiàn)在需要更新功能,更新功能的部分,擬使用laravel5.6進(jìn)行開(kāi)發(fā)。
問(wèn)題描述
其中需要解決幾個(gè)關(guān)鍵問(wèn)題,其中之一便是用戶(hù)認(rèn)證的問(wèn)題。即在系統(tǒng)1只登錄后,系統(tǒng)2中自動(dòng)識(shí)別其登錄信息。即本質(zhì)需要解決:laravel與thiniphp共享session的問(wèn)題。
方案設(shè)計(jì)
session采用redis進(jìn)行存儲(chǔ)。thinkphp與laravel共離訪問(wèn)redis,根據(jù)相同的cookie,自動(dòng)獲取存儲(chǔ)到redis中的認(rèn)證用戶(hù)信息。
解決方案
thinkphp開(kāi)啟redis支持
thinkphp3.2并不沒(méi)有集成session的redis支持,此時(shí),我們使用php中的設(shè)置來(lái)開(kāi)啟。在index.php中,我們加入以下兩行語(yǔ)句:
ini_set("session.save_handler", "redis"); ini_set("session.save_path", "tcp://redis:6379");
也可以將其加入到config.php配置文件中
此時(shí), thinkphp在進(jìn)行session存儲(chǔ)時(shí),將以PHPREDIS_SESSION做為前綴進(jìn)行存儲(chǔ)。
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
laravel開(kāi)啟redis
laravel開(kāi)啟redis的方法相對(duì)來(lái)講稍微復(fù)雜一些。具體信息,需要參考官方文檔使用composer來(lái)安裝Predis并進(jìn)行相關(guān)配置。
laravel獲取thinkphp的session
由于laravel完全棄用了PHP的內(nèi)置session。所以我們是沒(méi)有辦法能過(guò)$_SESSION來(lái)獲取到任何信息的(你甚至?xí)靡粋€(gè)變量未定義的錯(cuò)誤)。由于laravel的cookie進(jìn)行了加密處理。所以,我們也不能用laravel自帶的cookie來(lái)獲取cookie信息。
具體實(shí)現(xiàn)的思路為:
1 獲取原生cookie。
2 接拼PHPREDIS_SESSION組成key
3 使用redis直接獲取key中存的值
... use IlluminateSupportFacadesRedis; ... $cookie = $_COOKIE['PHPSESSID']; $session = Redis::get('PHPREDIS_SESSION:' . $cookie);
此$session即為thinkphp系統(tǒng)中的session值。
相關(guān)教程推薦:《laravel教程》