在实际的项目中,历史项目使用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开启redislaravel开启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值。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP !
相关推荐:
yii实战之控制器与视图交互
Laravel 中利用 GeoIP 获取用户地理位置信息
以上就是laravel5.6与thinkphp3.2使用redis共享session的方案的详细内容,PHP教程
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答