现在稍微大一点的网站基本上都有好几个子域名,比如需要分享用户的登录信息就得分享。PHP 如何在多个服务器上工作?
要解决这个问题,我们首先需要了解它是如何工作的。
原则
当客户端访问 PHP 服务器时,它会执行一次构建,通常存储在其中,内容根据关联存储在服务器的文件系统中,每个请求都是 fetch 再 fetch。
但是,当客户端访问不同的服务器时,每个服务器都会生成一个服务器,这使得之前无法共享不同的服务器。
解决共享问题有两个步骤
1. 多个服务器为同一客户端生成相同的结果
这个比较容易解决,只要我们为主域名生成就行了。有两种方法可以执行此操作:
1.1 通过 PHP 配置文件设置域名。找到php.ini文件并添加以下配置:
session.cooke_domain = .motui8.cn
1.2 代码设置的域名如下:
ini_set( 'session.cookie_domain' , 'motui8.cn' );
2. 多个服务器的内容可用于获取相同的内容
实现起来有点麻烦,主要是将其存储在所有服务器都可以访问它的地方。默认情况下,它存储在服务器的文件中,但我们也可以将其存储在 Redis 等缓存服务器中。对于文件系统,我们可以使用 NFS 来统一存储。
2.1 文件系统
这种方法依赖 PHP 垃圾回收器进行销毁,会在高并发存储的目录中生成大量文件。这可能会导致文件查找缓慢,并且缓存目录可以存储有限数量的文件,这可能会导致存储失败,因此我们不建议使用文件系统存储。
2.2 数据库存储
虽然这种方法不依赖 PHP 垃圾回收器,但会增加数据库的 I/O 问题,增加数据的压力,导致数据读写速度变慢,所以我们不建议使用这种方法。
2.3 Redis 缓存存储
这
缓存的数据在内存中,读写速度快,Redis 还可以单独设置过期时间,自动删除无效的。
现有的 PHP 框架基本都支持 Redis 存储,我们只需要配置相关配置即可。当然,如果你想自己编写相关代码,我给你举个例子:
//启动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']);
}
这就是存储的全部内容,希望这篇文章对您有所帮助。如果有什么不对劲的地方,可以在我的公众号上留言。
PS:如果找不到这篇文章,可以收藏点赞,这样就可以轻松翻阅找到。
每一次您的点赞和观看,我们都心存感激
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。