当前位置: 首页 > news >正文

PHP实践:分布式场景下的Session共享解决方案实现

在这里插入图片描述

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。
🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。
🏆本文已收录于PHP专栏:PHP进阶实战教程。
🏆另有专栏PHP入门基础教程,希望各位大佬多多支持❤️。
🎉欢迎 👍点赞✍评论⭐收藏

文章目录

  • 🚀一、前言
  • 🚀二、关于Session
  • 🚀三、多个服务器实现session共享的方式
    • 🔎3.1 数据库存储
    • 🔎3.2 文件存储
    • 🔎3.3 缓存存储
  • 🚀四、PHP将session存入到Redis中去
    • 🔎4.1 安装和配置Redis服务器
    • 🔎4.2 安装Redis扩展
    • 🔎4.3 配置PHP的Session存储
    • 🔎4.4 使用Redis存储Session
  • 🚀五、总结


🚀一、前言

SessionWeb开发中扮演着重要的角色,能够记录用户状态和行为。当应用运行在多个服务器上时,为了实现Session的共享,我们可以将Session数据存储到共享的地方,如数据库或缓存中。在分布式(多台服务器)的情况下面,为了保持用户登录的连续性,有该如何操作呢,文本就针对于这个问题深入研究一下。

🚀二、关于Session

Web开发中,Session(会话)是一种记录用户状态的机制。它利用了HTTP协议中的Cookie技术,在服务器端存储用户的相关信息,以便于下次用户访问时进行识别和使用。Session的作用非常重要,它可以用来记录用户的登陆状态、购物车内容、浏览历史等。下面是依赖于Session的工作流程图。

在这里插入图片描述

🚀三、多个服务器实现session共享的方式

当我们的应用运行在多个服务器上时,为了保证用户在不同服务器间的会话状态能够共享,我们需要将Session数据存储到一个可共享的地方,如数据库或缓存中。下面是几种实现Session共享的方式。

🔎3.1 数据库存储

将Session数据存储到数据库中,并通过Session ID来进行关联。不同服务器之间共享同一个数据库,通过读取和写入数据库中的Session数据来实现共享。

在这里插入图片描述

🔎3.2 文件存储

将Session数据存储到共享的文件系统中。不同服务器之间通过读写相同的文件来实现Session数据的共享。

🔎3.3 缓存存储

将Session数据存储到缓存服务器中,如Redis、Memcached等。不同服务器之间共享同一个缓存服务器,通过读取和写入缓存中的Session数据来实现共享。

在这里插入图片描述

🚀四、PHP将session存入到Redis中去

下面的步骤将指导你如何将PHP的Session数据存储到Redis中:

🔎4.1 安装和配置Redis服务器

首先,需要在服务器上安装Redis,并确保Redis能够正确运行。可以通过执行以下命令来安装Redis:

sudo apt-get install redis-server

修改Redis的配置文件redis.conf,确保以下配置项被启用:

# 将Redis设置为守护进程模式
daemonize yes# 设置Redis监听的IP地址和端口号
bind 127.0.0.1
port 6379# 设置Redis的持久化方式为RDB或AOF
save 900 1

重启Redis服务器以使配置生效。

🔎4.2 安装Redis扩展

在PHP中使用Redis作为Session存储介质,需要安装PHP的Redis扩展。可以通过以下命令来安装Redis扩展:

pecl install redis

然后,在PHP的配置文件php.ini中添加以下配置项:

extension=redis.so

重启Web服务器以使配置生效。

🔎4.3 配置PHP的Session存储

接下来,我们需要配置PHP的Session存储方式为Redis。在PHP的配置文件php.ini中,找到以下配置项,并进行相应的修改:

session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"

以上配置项中,session.save_handler表示Session数据的存储方式,session.save_path表示Redis服务器的地址和端口号。

重启Web服务器以使配置生效。

🔎4.4 使用Redis存储Session

当上述步骤完成后,PHP的Session数据就会被存储到Redis中了。你可以通过以下代码验证:

// 开启Session
session_start();// 设置Session数据
$_SESSION['username'] = 'WuKong';// 输出Session数据
echo $_SESSION['username'];

在输出上述代码后,你会发现$_SESSION['username']的值为WuKong,表示Session数据成功存储到Redis中,并能够正确获取。也可以登录到Redis,如果看到以PHPREDIS_SESSION开头的key说明配置已经生效了。

在这里插入图片描述

🚀五、总结

SessionWeb开发中扮演着重要的角色,能够记录用户状态和行为。当应用运行在多个服务器上时,为了实现Session的共享,我们可以将Session数据存储到共享的地方,如数据库或缓存中。
在这里插入图片描述
PHP语言为例,我们可以使用Redis作为Session的存储介质。通过安装和配置Redis服务器,安装Redis扩展,并修改PHPSession存储配置,我们可以将PHPSession数据存储到Redis中。这样,不同服务器之间就可以共享Session数据,提供一致的用户体验。

在这里插入图片描述

注:今天的内容就分享到这里,更多实战知识,请查看我这个专栏PHP进阶实战教程,我们下次见。

相关文章:

PHP实践:分布式场景下的Session共享解决方案实现

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责…...

07 - 查看、创建、切换和删除分支

查看所有文章链接:(更新中)GIT常用场景- 目录 文章目录 1. 查看分支2. 创建和切换分支3. 删除分支 1. 查看分支 git branch -va2. 创建和切换分支 第一种: 创建分支: git branch new_branch切换分支: …...

【SpringBoot】89、SpringBoot中使用@Transactional进行事务管理

事务是一组组合成逻辑工作单元的操作,虽然系统中可能会出错,但事务将控制和维护事务中每个操作的一致性和完整性。 1、SpringBoot 引用说明 新建的 Spring Boot 项目中,一般都会引用 spring-boot-starter 或者 spring-boot-starter-web,而这两个起步依赖中都已经包含了对…...

两天入门Linux、搭建Spring环境 第一天

一、Linux简介 1.什么是Linux 一个操作系统,未来公司里面会用到、接触的新操作系统。 2.为什么学Linux (1)个人职务需要,肯定会接触到Linux (2)职业发展,以后的发展肯定需要掌握Linux的许多使用方法 3.学哪些内容 (1)Linux基本介绍 (2)…...

OpenCV实例(九)基于深度学习的运动目标检测(一)YOLO运动目标检测算法

基于深度学习的运动目标检测(一) 1.YOLO算法检测流程2.YOLO算法网络架构3.网络训练模型3.1 训练策略3.2 代价函数的设定 2012年,随着深度学习技术的不断突破,开始兴起基于深度学习的目标检测算法的研究浪潮。 2014年,…...

CI/CD流水线实战

不知道为什么,现在什么技术都想学,因为我觉得我遇到了技术的壁垒,大的项目接触不到,做的项目一个字辣*。所以,整个人心浮气躁,我已经得通过每天的骑行和长跑缓解这种浮躁了。一个周末,我再次宅在…...

详解配置交换机多生成树MSTP+VRRP 的典型组网

详解配置交换机多生成树MSTPVRRP 的典型组网 组网: 1. 这是一个由三台交换机组成的倒三角型二层交换网络;网络中有4个VLAN:10、20、30、40;接口编号如图所示;SW3为接入层交换机,SW1、SW2为汇聚层交换机&am…...

二.net core 自动化发布到docker (Jenkins安装之后向导)

目录 ​​​​​​​​​​​​​​ 参考资料:https://www.jenkins.io/doc/book/installing/docker/#setup-wizard Post-installation setup wizard.(安装后安装向导) 基于上一篇文章安装,在安装并运行Jenkins(不包括使用Jenkins Opera…...

【设计模式——学习笔记】23种设计模式——解释器模式Interpreter(原理讲解+应用场景介绍+案例介绍+Java代码实现)

案例引入 通过解释器模式来实现四则运算,如计算ab-c的值,具体要求 先输入表达式的形式,比如abc-de,要求表达式的字母不能重复在分别输入a,b,c,d,e的值最后求出结果 传统方案 编写一个方法,接收表达式的形式&#xf…...

【计算机网络】——数据链路层

二、组帧 1、字符计数法 帧头部使用一个字符来表示帧的大小(包括第一个计数字符) (此处一字符一个字节) 2、字符填充收尾定界法 特定字符来定界帧的首和尾。若帧中数据段出现等同于特定字符的字符内容,前置一个转义字符。(类似于正则表达…...

数据结构:栈和队列(超详细)

目录 ​编辑 栈: 栈的概念及结构: 栈的实现: 队列: 队列的概念及结构: 队列的实现: 扩展知识: 以上就是个人学习线性表的个人见解和学习的解析,欢迎各位大佬在评论区探讨&#…...

AI项目二:基于mediapipe的虚拟鼠标控制

若该文为原创文章,转载请注明原文出处。 一、项目介绍 由于博主太懒,mediapipe如何实现鼠标控制的原理直接忽略,最初的想法是想控制摄像头识别手指控制鼠标,达到播放电影的效果。基本上效果也是可以的。简单的说是使用mediapipe检…...

EVE-NG 隐藏没有镜像的模板

eve-ng 默认情况下,在添加node时,会列出所有的模板,这样用着很不方便。 通过以下方式,可以使没有设备的模板不可见 cp /opt/unetlab/html/includes/config.php.distribution /opt/unetlab/html/includes/config.php 打开 config…...

机器学习理论笔记(一):初识机器学习

文章目录 1 前言:蓝色是天的机器学习笔记专栏1.1 专栏初衷与定位1.2 本文主要内容 2 机器学习的定义2.1 机器学习的本质2.2 机器学习的分类 3 机器学习的基本术语4 探索"没有免费的午餐"定理(NFL)5 结语 1 前言:蓝色是天…...

Programming abstractions in C阅读笔记: p114-p117

《Programming Abstractions in C》学习第48天&#xff0c;p114-p117&#xff0c;​总结如下&#xff1a; 一、技术总结 主要通过random number介绍了随机数的相关用法&#xff0c;interface​示例(random.h)​&#xff0c;client program示例(craps.c)。 #include <stdio…...

分布式应用:Zabbix监控Tomcat

目录 一、理论 1.Zabbix监控Tomcat 二、实验 1.Zabbix监控Tomcat 三、问题 1.获取软件包失败 2.tomcat 配置 JMX remote monitor不生效 3.Zabbix客户端日志报错 一、理论 1.Zabbix监控Tomcat &#xff08;1&#xff09;环境 zabbix服务端&#xff1a;192.168.204.214 …...

《起风了》C++源代码

使用方法 Visual Studio、Dev-C、Visual Studio Code等C/C创建一个 .cpp 文件&#xff0c;直接粘贴赋值即可。 #include <iostream> #include <Windows.h> #pragma comment(lib,"winmm.lib") using namespace std; enum Scale {Rest 0, C8 108, B7 …...

Grafana展示k8s中pod的jvm监控面板/actuator/prometheus

场景 为保障java服务正常运行&#xff0c;对服务的jvm进行监控&#xff0c;通过使用actuator组件监控jvm情况&#xff0c;使用prometheus对数据进行采集&#xff0c;并在Grafana展现。 基于k8s场景 prometheus数据收集 配置service的lable&#xff0c;便于prometheus使用labl…...

实例038 设置窗体在屏幕中的位置

实例说明 在窗体中可以设置窗体居中显示&#xff0c;本例通过设置窗体的Left属性和Top属性可以准确设置窗体的位置。运行本例&#xff0c;效果如图1.38所示。 技术要点 设置窗体在屏幕中的位置&#xff0c;可以通过设置窗体的属性来实现。窗体的Left属性表示窗体距屏幕左侧的…...

合成数据及其在AI领域中的作用

什么是合成数据&#xff1f; 合成数据是由人工创建而非从现实生活中获得的数据&#xff0c;它从机器学习对数据的需求发展而来。最初&#xff0c;为了精确训练AI模型&#xff0c;必须获得涵盖所有可能场景的训练数据。如果某个场景没有发生或未被获得&#xff0c;就没有相应的…...

Phi-3-Mini-128K企业级应用:基于MCP协议构建安全可控的AI工具链

Phi-3-Mini-128K企业级应用&#xff1a;基于MCP协议构建安全可控的AI工具链 最近和几个在企业里做技术管理的朋友聊天&#xff0c;大家不约而同地提到了同一个烦恼&#xff1a;看着外面各种AI模型能力越来越强&#xff0c;心里痒痒的&#xff0c;真想引入到自己的业务流程里&a…...

紧急通知:2024年Q3起欧盟EDPS已将差分隐私实现纳入DPIA强制审查项——Python开发者必须立即核查的4个代码检查点

第一章&#xff1a;差分隐私合规性背景与EDPS新规解读随着欧盟数据保护监管体系持续演进&#xff0c;欧洲数据保护监督机构&#xff08;EDPS&#xff09;于2024年7月发布《关于匿名化与假名化技术在公共部门应用的指导意见》&#xff0c;首次将差分隐私&#xff08;Differentia…...

不是删改,是升级:百考通智能降重+降AI,让语言更学术、更像“你”

在一个人工智能可以生成论文的时代&#xff0c;最荒诞的现实不是机器冒充人类&#xff0c; 而是人类因写得太像“一篇合格的学术论文”&#xff0c;被当作AI。 2026年&#xff0c;无数普通学子正陷入一场无声的困境&#xff1a; 你没用任何代写&#xff0c;却因逻辑清晰被系统…...

AsrTools全攻略:革新语音转文字效率的智能解决方案

AsrTools全攻略&#xff1a;革新语音转文字效率的智能解决方案 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate tex…...

Spring Boot 3.1 新特性解析与实践

Spring Boot 3.1 新特性解析与实践 前言 核心新特性 1. 虚拟线程支持 Spring Boot 3.1 基于 Java 21&#xff0c;正式支持虚拟线程&#xff08;Virtual Threads&#xff09;&#xff1a; Configuration public class ThreadConfig {Beanpublic ExecutorTaskExecutor taskExecut…...

深入TC397与TLF35584的SPI通信:从寄存器操作到汽车ECU低功耗状态管理实战

深入TC397与TLF35584的SPI通信&#xff1a;从寄存器操作到汽车ECU低功耗状态管理实战 在汽车电子领域&#xff0c;电源管理芯片的选择与配置直接关系到整车电子控制单元&#xff08;ECU&#xff09;的可靠性与能耗表现。英飞凌的TLF35584作为一款高集成度电源管理IC&#xff0c…...

前端微前端架构:别再把所有功能都放在一个应用里了

前端微前端架构&#xff1a;别再把所有功能都放在一个应用里了 各位前端同行&#xff0c;咱们今天聊聊前端微前端架构。别告诉我你还在把所有功能都放在一个应用里&#xff0c;那感觉就像在一个房间里放了所有家具。 为什么你需要微前端架构 最近看到一个项目&#xff0c;单页应…...

别再手动重启了!CRMEB定时任务修改后,这两种生效方式你选对了吗?

CRMEB定时任务深度解析&#xff1a;两种触发模式的选择与实战优化 在电商系统运维中&#xff0c;定时任务如同隐形的齿轮&#xff0c;默默推动着优惠券发放、订单状态更新、数据报表生成等关键业务流程。CRMEB作为基于ThinkPHP6的成熟电商解决方案&#xff0c;其定时任务模块设…...

LFM2.5-1.2B-Thinking-GGUF代码生成能力评测:对比Claude Code的轻量化替代方案

LFM2.5-1.2B-Thinking-GGUF代码生成能力评测&#xff1a;对比Claude Code的轻量化替代方案 1. 评测背景与模型特点 在当今AI辅助编程领域&#xff0c;大型语言模型已经成为开发者日常工作的得力助手。然而&#xff0c;许多高性能模型往往需要云端部署或强大的计算资源&#x…...

从“变速齿轮”到“创新引擎”:解码阿里“大中台、小前台”战略的演进与实战

1. 中台战略的起源与本质 第一次听说"大中台、小前台"这个概念时&#xff0c;我正坐在杭州一家咖啡馆里和几位阿里P8的技术专家聊天。他们用了一个特别形象的比喻&#xff1a;"现在的互联网公司就像一辆老式自行车&#xff0c;前台是拼命蹬车的双腿&#xff0c;…...