【注意】最后更新于 December 6, 2019,文中内容可能已过时,请谨慎使用。
前置条件
首先需要有redis的支持 session_driver=database 的另说
1
|
composer require predis/predis 1.0.*
|
文件配置
在.env 文件下的app_key
1
2
3
4
|
APP_KEY=Lajq5EFWYq1COgmgltYM5TlSfRaTxLq1
CACHE_DRIVER=redis
SESSION_DRIVER=redis
|
config/database.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
'redis' => [
'cluster' => false,
//...其它一些配置...//
'session' => [
'host' => env('REDIS_HOST', '8b9a53cd4dc044e7.redis.rds.aliyuncs.com'),
'port' => 6379,
'database' => 4,
'password' => env('REDIS_PASSWORD', 'Hotcast123'),
],
],
|
config/session.php
1
2
3
4
5
6
7
|
'driver' => env('SESSION_DRIVER', 'file'),
//向指定当session驱动使用redis时指定redis的配置方案(就是上面的那个数组)
'connection' => 'session',
//必须指定共同的域名 否则session无法共享
'domain' => '.yourWebName.com',
|
config/cache.php
1
2
3
4
5
|
'redis' => [
'driver' => 'redis',
//这里就是将cache和session的redis配置共用
'connection' => 'session',
],
|
示例
在 a.yourWebName.com 的route.php
1
2
3
4
5
6
7
8
|
Route::get('/test-set-cache-session',function(){
Cache::put('cache1','cache1-value',1);
Cache::put('cache2','cache2-value',1);
Session::put('session1','session1-value',1);
Session::put('session2','session2-value',1);
return Session::getId();
});
//此条路由分别用 Cache 设置两条数据和两条 Session 数据,最后返回 SessionId
|
在 b.yourWebName.com 的route.php中
1
2
3
4
5
6
7
8
9
10
11
|
Route::get('/test-get-cache-session',function(){
$data = [
'cache1'=>Cache::get('cache1'),
'cache2'=>Cache::get('cache2'),
'session1'=>Session::get('session1'),
'session2'=>Session::get('session2'),
'session_id'=>Session::getId()
];
return $data;
});
//此条路由分别获取获取两条 Cache 数据和两条 Session 数据及 SessionId ,最后返回数据
|
总结
同步session有以下关键点:
- app_key两者要一样
- session配置指向的redis库要一样,这样方便两个程序找到共享的session位置
- 所属项目需要支持redis扩展包
文章作者
GPF
上次更新
2019-12-06
(7ba517e)