天涯论坛

 找回密码
 立即注册
搜索
查看: 24|回复: 5

PHP怎么样实现多服务器session共享

[复制链接]

3138

主题

3万

回帖

9996万

积分

论坛元老

Rank: 8Rank: 8

积分
99968624
发表于 2024-10-4 13:22:41 | 显示全部楼层 |阅读模式

此刻稍微大一点的网站基本上都有好几个子域名,例如www.motui8.cn,blog.motui8.cn,这些网站倘若需要共享用户的登录信息,就必须session共享。PHP又是怎样做到多个服务器,session共享的呢?

处理这个问题咱们首要要明白session的工作原理是什么?

session原理

客户端拜访PHP服务器时,执行session_start生成session_id,通常咱们会把session_id存储到cookie中,按照session_id相关内容并保留在服务器文件系统中,每一次请求经过cookie获取session_id,再经过session_id获取session内容。

然则客户端拜访区别服务器时,每一台服务器都会生成一个session_id,这就引起区别服务器之前没法共享session了。

处理session共享其时就两个过程

1. 多台服务器针对同一个客户端生成同一个session_id

这个比较好处理,只要咱们针对主域名来生成session_id就可。实现的方式有两种:

1.1 经过php配置文件设置session_id的cookie域名。找到php.ini文件添加如下配置:

session.cooke_domain = .motui8.cn

1.2 经过代码设置session_id的cookie域名,代码如下:

ini_set( session.cookie_domain,motui8.cn );

2. 多台服务器之前的session内容互通有没有能够经过同一个session_id获取到内容

这一点实现起来比较麻烦,重点便是session存储在所有服务器都能够拜访地区。默认的存储在服务器的文件中,咱们能够存储在 Redis 这类缓存服务器中。针对文件系统咱们能够经过 NFS来统一存储。

2.1 文件系统

这种方式的session依赖于PHP垃圾收集器进行销毁,在高并发下session存储的目录下会产生海量的文件。这种方式会引起查询文件缓慢,并且session缓存目录可存储的文件数是有限的,有可能引起session存储失败,因此呢咱们意见运用文件系统存储session。

2.2 数据库存储

这种方式虽然不依赖PHP的垃圾收集器,然则会加大数据库的IO问题,增多数据的压力,引起数据读写速度变慢,因此呢这种方式,咱们意见大众运用

2.3 Redis 缓存存储

缓存数据都在内存中,读写速度快,redis还能够单独设置过期时间,自动删除无效的session。

现有的PHP框架基本都支持Redis存储session,咱们只需要配置好session关联配置就可。当然倘若你想自己但对编写session关联代码能够,我给大众一个示例:

<?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]); }

到此session存储的就讲完了,期盼这篇文案大众有所帮忙倘若有什么不对的地区大众能够在我的公众号留言。





上一篇:session利用的小思路
下一篇:php环境的安装与运用
回复

使用道具 举报

3069

主题

3万

回帖

9913万

积分

论坛元老

Rank: 8Rank: 8

积分
99138952
发表于 2024-10-6 06:06:17 | 显示全部楼层
“BS”(鄙视的缩写)‌
回复

使用道具 举报

3061

主题

3万

回帖

9913万

积分

论坛元老

Rank: 8Rank: 8

积分
99139052
发表于 2024-10-7 17:21:33 | 显示全部楼层
我完全同意你的观点,说得太对了。
回复

使用道具 举报

3047

主题

3万

回帖

9606万

积分

论坛元老

Rank: 8Rank: 8

积分
96065852
发表于 2024-10-15 01:00:55 | 显示全部楼层
我深感你的理解与共鸣,愿对话长流。
回复

使用道具 举报

3048

主题

3万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99109040
发表于 2024-10-18 06:49:27 | 显示全部楼层
感谢你的精彩评论,为我的思绪打开了新的窗口。
回复

使用道具 举报

2946

主题

3万

回帖

9997万

积分

论坛元老

Rank: 8Rank: 8

积分
99979427
发表于 2024-10-23 11:26:07 | 显示全部楼层
论坛外链网  http://www.fok120.com/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-23 06:42 , Processed in 0.112999 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.