前置条件

首先需要有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扩展包