比如:现在有三台php服务器,且实现了负载均衡,如何让这三台web服务器共享session数据?
session数据默认是以文件的形式保存在web服务器的磁盘上,一般都是用户登录成功的时候,保存session数据。
同一个用户登录后,就会将session保存在某个web服务器上,假设是保存在服务器A上,该用户访问网站的其他页面时,可能请求的就是服务器B或服务器C,但服务器B或服务器C上并没有该用户的session文件,这样,就会导致网站误认为该用户未登录,用户的登录状态丢失的问题。
归根结底,就是要解决多台web服务器共享session的问题,至少有以下三种方法:
一、将本该保存在web服务器磁盘上的session数据保存到cookie中
即用cookie会话机制替代session会话机制,将session数据保存到客户端浏览器的cookie中,这样同一个用户访问同一网站时,无论负载均衡到哪台web服务器,都不用再去服务器请求session数据,而直接获取客户端cookie中的session数据。如此,同一个用户的登录状态就不会丢失了。
但这样做,有三大弊端:
  1. 把session数据放到客户端的cookie中,一般都是重要数据(如用户id、昵称等),会存在安全问题,但可以将session数据加密后,再存放到cookie中,来降低安全风险。
  2. 浏览器对单个cookie的数据量大小限制为4K左右,因此会存在数据量的限制问题。
  3. 影响带宽性能,降低了页面的访问速度。在高访问量的情况下,用户每次请求时,都要将客户端cookie中的session数据发送到服务器,要占用较多的带宽,进而影响访问速度,服务器带宽成本增高。
二、将本该保存在web服务器磁盘上的session数据保存到MySQL数据库中
sessionid还是利用cookie机制存储到客户端,但session数据却存放在MySQL服务器上。(需要建立sessionid和session数据行的对应关系)
但这样做,只适合访问量比较小的网站。如果网站的访问量比较大,对MySQL服务器会造成很大压力。因为每次用户请求页面(即使是刷新页面)都要查询MySQL数据库中的session数据表,进而判断用户的登录状态和读取用户相关信息,势必会对数据库服务器造成很大压力,这样就会降低服务器的响应速度,影响用户体验。
三、将本该保存在web服务器磁盘上的session数据保存到内存数据库(memcache或redis)中
memcache或redis是基于内存存储数据的,性能很高,尤其是高并发的情况下尤为合适。主要是因为从内存中读取数据要比从磁盘读取数据快很多。
内存数据库还支持数据过期失效的机制,正好与session的过期机制对应,推荐使用redis内存数据库,因为它比memcache支持更多的
数据类型,且支持内存数据备份到磁盘。
这里简单说一下,后面两种方法的注意要点:
  • 如果多台web服务器对应的是不同的域名,为了保证cookie的唯一(同一个cookie在各个域名有效),需要修改php.ini文件中的session.cookie_domain
  • 由于后面两种方法,属于用户自定义的方式管理session,而非默认的文件处理方式,故需修改php.ini中的session.save_handler=user
  • 在开启session之前(即调用session_start()之前),需要先调用session_set_save_handler,关于session_set_save_handler的具体用法,请参考php手册

来源:http://blog.csdn.net/lamp_yang_3533/article/details/51984201

如何在多台web服务器上共享session?相关推荐

  1. 多台web服务器之间共享session

    常见的几种方法如下: 1. 写客户端Cookie的方式 当用户登陆成功以后,把网站域名.用户名.密码.token.session有效时间全部采用cookie的形式写入到客户端的cookie里面,如果用 ...

  2. PHP多台服务实现单点登录,如何在多台服务器上共享Session(PHP/JSP/ASP.NET)以及单点登录(SSO)...

    如何在多台服务器上共享Session(PHP/JSP/ASP.NET)以及单点登录(SSO) Apache Session复制: 使用Memcached来共享PHP Session: 使用Cohere ...

  3. web服务器集群(多台web服务器)后session如何同步和共享

    2019独角兽企业重金招聘Python工程师标准>>> 在访问量上去以后,很多人会采用web集群的方式在满足逐渐增长的用户量.这时候就不得不面对一个问题,那就是在多个服务器下,每次请 ...

  4. 在一台服务器建立多个web站点的方法,在一台WEB服务器上实现建立多个Web网站站点的几种方法...

    我们知道,网络上的每一个Web站点都有一个惟一的身份标识,从而使客户机能够准确地访问.这一标识由三部分组成,即TCP端口号.IP地址和主机头名,要实现"一机多站"就需要在这三个方面 ...

  5. iis服务器怎样配置多张证书,IIS:管理多个 Web 服务器上的多个证书 | Microsoft Docs...

    IIS:在多台 Web 服务器上管理多个证书 08/17/2016 本文内容 管理大量安全证书是一项繁琐的工作,您可以使用 Windows PowerShell 来加快这一过程. Jason Helm ...

  6. Forbidden Attack:7万台web服务器陷入被攻击的险境

    一些受VISA HTTPS保护的站点,因为存在漏洞容易受到Forbidden攻击,有将近70,000台服务器处于危险之中. 一种被称为"Forbidden攻击"的新攻击技术揭露许多 ...

  7. Forbidden Attack:7万台web服务器陷入被攻击的险境 1

    2019独角兽企业重金招聘Python工程师标准>>> 一些受VISA HTTPS保护的站点,因为存在漏洞容易受到Forbidden攻击,有将近70,000台服务器处于危险之中. 一 ...

  8. 由于 web 服务器上此资源的访问控制列表(acl)配置或加密设置,您无权查看此目录或页面。...

    场景:IIS中遇到无法预览的有关问题(HTTP 异常 401.3 - Unauthorized 由于 Web 服务器上此资源的访问控制列表(ACL)配置或加密设置 IIS中遇到无法预览的问题(HTTP ...

  9. 云服务器里可以放多少网站,一台云服务器上可以放多少个网站

    一台云服务器上可以放多少个网站 内容精选 换一换 云耀云服务器(Halo Elastic Cloud Server,HECS)是可以快速搭建简单应用的新一代云服务器,具备独立.完整的操作系统和网络功能 ...

最新文章

  1. 第1关:求1000以内所有的水仙花数
  2. 电脑DIY之内存传输标准
  3. leetcode算法题--Minimum Depth of Binary Tree
  4. WCF与现行分布式通讯技术性能对比
  5. 语音信号处理之(一)动态时间规整(DTW)
  6. centos在线安装mysql
  7. 15分钟构建超低成本数据大屏:DataV + DLA
  8. ios 静音模式_静音设计模式
  9. Keil/MDK(0):使用过程中的一些设置
  10. c++ static静态变量、静态函数
  11. Julia : where与类型限定
  12. 苹果电脑安装windows系统 失败后 磁盘空间丢失
  13. Win10 wifi、蓝牙打不开
  14. 【tomcat运行异常】Error running ‘*** [org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:run]‘
  15. python爬虫图片工具安卓版下载_python爬虫之图片下载APP1.0
  16. gaitset全代码实现问题总结
  17. 50W闭环控制Boost DC-DC变换器样机设计
  18. Video Of You! 勒索诈骗邮件
  19. Railway Dashboard部署PHP苹果CMS项目的详细步骤
  20. 亚马逊、速卖通、wish、Lazada、shoppe、ebay、煤炉测评跟淘宝shua单区别在哪?

热门文章

  1. php 内容转换dom,php – 防止DOMDocument :: loadHTML()转换实体
  2. 3.spring cloud + zookeeper注册中心 + Feign调用案例
  3. nginx中configure脚本支持的常用选项,拍摄自《Nginx高性能Web服务器详解》
  4. c语言中常见错误总结
  5. java执行Linux shell命令或者Window cmd命令
  6. sessionFactory.getCurrent()和sessionFactory.openSession()的区别
  7. 打开高效文本编辑之门_Linux Sed模拟常见文件命令
  8. 字符变量赋值规则_C#的变量、运算符
  9. Qt Creator的下载和安装
  10. 2018年9月份GitHub上最热门的Python项目