解决多台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手册

最新文章

  1. Smart3D系列教程7之 《手动配置S3C索引加载全部的瓦片数据》
  2. 使用excel计算指数平滑和移动平均
  3. Hadoop openssl false
  4. TimeQuest学习
  5. Bete冲刺第四阶段
  6. nginx反向代理后getRequestURL会出现问题
  7. mysql 5.7.15发布
  8. 2016 版 Laravel 系列入门教程(五)【最适合中国人的 Laravel 教程】
  9. 如何将你自己的Python package发布到PyPI上
  10. tortoisesvn的安装与使用
  11. 转:Stack Overflow通过关注性能,实现单块应用架构的扩展能力
  12. [CF Round #295 div2] C. DNA Alignment 【观察与思考0.0】
  13. 如何用Excel直接查询Oracle中的数据(转)
  14. PHP常量定义define与const
  15. 通用table样式
  16. Es6 Symbol.iterator
  17. unity做游戏常用功能实现(一)多方向同时输入也能让物体正常移动
  18. 2018-2019-2 网络对抗技术 20165311 Exp2 后门原理与实践
  19. webView加载url,加载指定字符串
  20. mysql5.7一键安装脚本

热门文章

  1. 概率dp (背包+概率) 背包的多一点
  2. 七、linux基础-jdk1.8和weblogic12.2.1.3.0安装
  3. wix在使用heat自动生成wxs时添加windows服务组件
  4. 关于为什么使用React新特性Hook的一些实践与浅见
  5. opencv python:轮廓发现
  6. 一个Log-Tan积分
  7. tensorflow之tensorboard
  8. 极简的js点击组图切换效果
  9. Servlet线程安全问题(转载)
  10. HTML+CSS—背景图片、图片定位