php实现多服务器session共享
session工作原理
客户端访问时通过session_start生成一个session_id,session_id一般存在cookie中,关联内容并保存在服务器文件中,每次通过cookie获取session_id获取内容,多台服务器会有多个session_id,无法实现共享,解决方法如下:
多台服务器对同一客户端我们可以通过主服务器生成一个session_id完成session共享
设置session_id的cookie域名
pip.ini配置文件设置:session.cooke_domain =
代码设置 ini_set( 'session.cookie_domain' , '' );
通过session_id获取内容实现登入内容共享,把session存储在多服务器都能够访问的地方,默认存储在文件中,我们可以存储在redis缓存中
<?php
//启动session
session_start();
//设置session最大存活时间,单位【秒】
ini_set('session.gc_maxlifetime',60*60);
//设置session存储方法
ini_set('session.save_handler','redis');
//设置session存储路径,存储方式为redis时,路径就是redis的连接(如果不需要授权,直接使用 tpc://127.0.0.1:6379 即可)
ini_set('session.save_path','tpc://127.0.0.1:6379?persistent=1&auth=授权密码&database=redis数据库');
//设置session内容,在内容中存储当前key的过期时间
$_SESSION['user_info'] = [
'data'=>['id'=>1],
'expire'=>time()+60*30
];
//获取session内容
$data = $_SESSION['user_info'];
//判断当前session是否过期
if($data['expire']>time()){
//删除session中已过期的key
unset($_SESSION['user_info']);
echo 'session已过期';
}else{
print_r($data['data']);
}