很多开发中涉及到用户的Session验证很保留的问题,这个问题比较有意思,总结了几种方案,只供参考。

  [  问题提出 ]

  为了满足足够大的应用,满足更多的客户,于是我们架设了N台Web服务器(N>=2),在多台Web服务器的情况下,我们会涉及到一个问题:用户登陆一台服务器以后,如果在跨越到另一台服务器的时候能够继续使用客户的Session?

  (以下描述方案只是针对Linux/Unix + Apache + Mysql + PHP的开发架构,当然,也可以扩展到其他平台。)

  [  问题解决方案 ]

  既然我们的问题已经摆在面前了,那么就要从技术角度去解决问题,给我们的客户更好的体验,总结了几个方案。

  1. 写客户端Cookie的方式

  当用户登陆成功以后,把网站域名、用户名、密码、token、session有效时间全部采用cookie的形式写入到客户端的cookie里面,如果用户从一台Web服务器跨越到另一台服务器的时候,我们的程序主动去检测客户端的cookie信息,进行判断,然后提供对应的服务,当然,如果cookie过期,或者无效,自然就不让用户继续服务了。当然,这种方法的弊端就不言而喻了,比如客户端禁用了cookie或者cookie被***窃取了呢?

  2. 服务器之间Session数据同步的方式

  假设Web服务器A是所有用户登陆的服务器,那么当用户验证登陆一下,session数据就会写到A服务器里,那么就可以自己写脚本或者守护进程来自动把session数据同步到其他Web服务器,那么当用户跳转到其他服务器的时候,那么session数据是一致的,自然就能够直接进行服务无须再次登陆了。缺点是,可能会速度慢,不稳定,如果是单向同步的话,登陆服务器出现问题,那么其他服务器也无法服务,当然也可以考虑双向同步的问题。

  3. 利用NFS共享Session数据的方式

  其实这个方案和下面的Mysql方案类似,只是存储方式不一样。大致就是有一台公共的NFS服务器(Network File Server)做共享服务器,所有的Web服务器登陆的时候把session数据写到这台服务器上,那么所有的session数据其实都是保存在这台NFS服务器上的,不论用户访问那太Web服务器,都要来这台服务器获取session数据,那么就能够实现共享session数据了。缺点是依赖性太强,如果NFS服务器down掉了,那么大家都无法工作了,当然,可以考虑多台NFS服务器同步的形式。
(关于NFS的经典文章:http://linux.vbird.org/linux_server/0330nfs.php)

  4. 利用Mysql数据库共享Session数据的方式

  这个方式与NFS的方式类似,也是采用一台Mysql服务器做共享服务器,把所有的session的数据保存到Mysql服务器上,所有Web服务器都来这台Mysql服务器来获取Session数据。缺点也是依赖性太强,Mysql无法工作了影响所有的Web服务器,当然,可以考虑多太Mysql数据库来共享session,使用同步Mysql数据的方式。

  (Mysql同步我写过文章:http://blog.csdn.net/heiyeshuwu/archive/2005/10/31/520007.aspx)

  5. 使用硬件设备

  这个算是比较成熟的解决方案了,使用类似BIG-IP的负载设备来实现资源共享,那么就能够又稳定又合理的的共享Session了。目前很多门户网站采用这种方式。缺点很明显了,就是要收费了,硬件设备肯定需要购买成本的,不过对于专业或者大型应用来讲,是比较合理并且值得的。
(关于BIG-IP设备:http://www.f5.com.cn/channel.php?channel=product&type=BIG-IP-%D3%A6%D3%C3%C1%F7%C1%BF%B9%DC%C0%ED&id=36)

转载于:https://blog.51cto.com/supremejoywei/1143523

多WEB服务器共享SESSION方案相关推荐

  1. 如何在多web服务器共享SESSION数据

    2019独角兽企业重金招聘Python工程师标准>>> 一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站 ...

  2. php服务器session共享,PHP实现多WEB服务器共享SESSION的方法(2)

    三.多服务器共享SESSION 的主要障碍及解决办法 森马服饰通过了解 SESSION 的工作原理,我们可以发现,在默认情况下,各个服务器会各自分别对同一个客户端产生SESSION ID,如对于同一个 ...

  3. atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty  HttpListener...

    atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty  HttpListener 1. 自定义web服务器的实现方案,基于原始socket vs   ...

  4. php java 共享session_PHP 实现多服务器共享 SESSION 数据

    一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名.密码在整个网站的各个模块中都是可以登录使 ...

  5. session多服务器共享的方案梳理

    默认情况下,php的session文件是保存在磁盘文件中.在php.ini配置文件中的配置项如下: session.save_handler = files session.save_path = & ...

  6. 多服务器共享Session的解决方案

    问题 为了满足足够大的应用,满足更多的客户,于是我们架设了N台Web服务器(N>=2),在多台Web服务器的情况下,我们会涉及到一个问题:用户登陆一台服务器以后,如果在跨越到另一台服务器的时候能 ...

  7. 应用服务器集群的session管理-多台服务器共享session问题

    应用服务器集群的session管理:这是我在一本网站技术架构分析的书上看到的.这一章主要写在高可用架构设计之下服务无状态这一特性下怎么管理会话(session).以下是几例解决方案(示例图为转载图片) ...

  8. php qstr,PHP实现多服务器共享SESSION 数据(2)

    //多主机共享保存 SESSION ID 的 COOKIE ini_set('session.cookie_domain',    $domain); //将 session.save_handler ...

  9. 不同域名 共享session方案

    git笔记: https://gitee.com/thkcat/domain_session.git

  10. 如何在多台web服务器上共享session?

    比如:现在有三台php服务器,且实现了负载均衡,如何让这三台web服务器共享session数据? session数据默认是以文件的形式保存在web服务器的磁盘上,一般都是用户登录成功的时候,保存ses ...

最新文章

  1. 企业 SpringBoot 教程 (七)springboot开启声明式事务
  2. 小米纵向拓展接力赛 接棒新国货“热水器”
  3. Android ViewPager多页面滑动切换以及动画效果---换view
  4. mybatis foreach map_重学Mybatis(六)-------输入映射(含面试题)
  5. C++ 深拷贝和浅拷贝
  6. 注册页面的JSON响应方式详细分析(与前端页面交互方式之一)
  7. vue-admin自定义后台管理系统(二)之vue-cli3创建前端项目
  8. 如何搞懂html+php实现个人博客网站?【附代码详解】毕业设计 大作业项目
  9. 5个SEO网站优化的技巧
  10. 开放存取知识库及其数据采集规范的研究
  11. 论文分享 CFUN: Combining Faster R-CNN and U-net Network for Efficient Whole Heart Segmentation
  12. mysql fio测试_fio_飞哥最爱白菜_新浪博客
  13. 2021年安全员-B证(广西省-2021版)考试技巧及安全员-B证(广西省-2021版)
  14. 目前计算机常用的硬盘类型,干货大放送,电脑硬盘分类你知道几个?
  15. iOS 3DES加密无盐值加密
  16. 国内资深安全专家详谈Trojan-PSW盗号***
  17. (全网最细)顺序栈详解 +实例解析
  18. Spring Boot 的aplication.properties 中文乱码问题
  19. 全国大学生智能车竞赛技术报告细则
  20. Ultral 做系统盘 记录

热门文章

  1. GIS案例练习-----------第五天
  2. Python3——列表:Python主力
  3. Python编程——函数
  4. python 生成可执行文件.exe
  5. do while新用法--方便数据验证时跳出
  6. 面试题:Java对象不再使用时,为什么要赋值为null?
  7. Android中如何Hook住JNI方法
  8. matlab画图不显示中文_[过时] [LaTeX 使用] 升级 macOS 10.15 后 ctex 文档不显示中文的临时方案...
  9. css3中插入地图,CSS3 地图展开动画
  10. 如何使用代码获取电脑内存_代码实战 | 如何在 Android 开发中使用协程