這篇文章主要介紹了關於laravel5.6與thinkphp3.2使用redis共用session的方案,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
在實際的項目中,曆史項目使用thinkphp3.2開發,現在需要更新功能,更新功能的部分,擬使用laravel5.6進行開發。
問題描述
其中需要解決幾個關鍵問題,其中之一便是使用者認證的問題。即在系統1隻登入後,系統2中自動識別其登入資訊。即本質需要解決:laravel與thiniphp共用session的問題。
方案設計
session採用redis進行儲存。thinkphp與laravel共離訪問redis,根據相同的cookie,自動擷取儲存到redis中的認證使用者資訊。
解決方案
thinkphp開啟redis支援
thinkphp3.2並不沒有整合session的redis支援,此時,我們使用php中的設定來開啟。在index.php中,我們加入以下兩行語句:
ini_set("session.save_handler", "redis");ini_set("session.save_path", "tcp://redis:6379");
也可以將其加入到config.php設定檔中
此時, thinkphp在進行session儲存時,將以PHPREDIS_SESSION做為首碼進行儲存。
laravel開啟redis
laravel開啟redis的方法相對來講稍微複雜一些。具體資訊,需要參考官方文檔使用composer來安裝Predis並進行相關配置。
laravel擷取thinkphp的session
由於laravel完全棄用了PHP的內建session。所以我們是沒有辦法能過$_SESSION來擷取到任何資訊的(你甚至會得一個變數未定義的錯誤)。由於laravel的cookie進行了加密處理。所以,我們也不能用laravel內建的cookie來擷取cookie資訊。
具體實現的思路為:
1 擷取原生cookie。
2 接拼PHPREDIS_SESSION組成key
3 使用redis直接擷取key中存的值
...use Illuminate\Support\Facades\Redis;... $cookie = $_COOKIE['PHPSESSID']; $session = Redis::get('PHPREDIS_SESSION:' . $cookie);
此$session即為thinkphp系統中的session值。
以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!