Laravel-Session

前置条件

首先需要有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扩展包
这个博客有个赞赏功能,不试一下吗?