session共享个人小结
一.需求问题:
如果你的网站是存放在一个机器上,那么是不存在这个问题的,因为会话数据就在这台机器,但是如果你使用了负载均衡把请求分发到不同的机器呢?
这个时候会话id在客户端是没有问题的,
但是如果用户的两次请求到了两台不同的机器,而它的session数据可能存在其中一台机器,这个时候就会出现取不到session数据的情况,
于是session的共享就成了一个问题。
二.实现session共享方法:
1.通过保存sessionID来获取对应session的值,
php中,通过session_Id()函数能取到sessionID,session的值是保存在服务端的,我们可以将sessionID保存在cookie中,因为cookie是保存在客户端的。
当用户请求后端数据时,首先获取保存在客户端的cookie中的sessionID值,在php中首先
$sessionid =$_COOKIE['sesssionid'];
session_id($sessionid) //设置获取对应sessionid的session的值
session_start() //此函数一定要在session_id()函数的后面
之后就可以获取对应的session值
***此方法的sessionID保存在客户端,信息存储不安全,cookie也可以伪造
2。
利用nginx的基于访问ip的hash路由策略,
保证访问的ip始终被路由到同一个tomcat上,这个配置更简单。
但如果应用是某一个局域网大量用户同时登录,这样负载均衡就没什么作用了。
而且客户端访问的服务器必须是这个nginx上,否咋ip获取不准确造成混乱。
3。
使用memcache和redis实现共享(个人首选)
修改所有服务器 php配置文件里面的
session.save_handler = files 改为session.save_handler = memcache /redis
session.save_path = "127.0.0.1:11211或127.0.0.1:6379"
或者使用in_set()方法
4.保存在数据库
数据库需要同步,增加了数据库的i/o,一般不使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构