`
sunqitang
  • 浏览: 74906 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多服务器间共享Session的解决方案(转)

阅读更多

多Web服务器之间共享Session的解决方案


很多开发中涉及到用户的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 ... %DC%C0%ED&id=36

以上这些只是我的个人愚见,没有经过试验,不保证其准确实在性,只是提供一种想法和参考。

分享到:
评论

相关推荐

    分布式session方案

    第一种:粘性session、第二种:服务器session复制、第三种:session共享机制、第四种......详细请参考文档

    Nginx Session共享问题解决方案解析

    这篇文章主要介绍了Nginx Session共享问题解决方案解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Nginx解决Session共享问题:  1.nginx或者haproxy做的...

    memcached实现集群的session共享问题

    memcached实现集群的session共享问题,处理集群服务器情况下,memcached的session共享解决方案

    集群中几种session同步解决方案的比较

    六种session共享的方法,是服务器水平扩展必须的内容之一,自己收集,推荐给大家

    sna集中式session管理实现服务器集群及客户端程序

    sna集中式session管理实现服务器集群及客户端程序,以“单点登陆、session共享解决方案(2)”为基础建立的服务器机群应用,运行server.bat启动服务器端,将client包导入web工程,通过Client.sessionPut()等方法调用。...

    Tomcat实现session共享(session 会话复制)

    集群最有效的方案就是负载均衡,而实现负载均衡用户每一个请求都有可能被分配到不固定的服务器上,这样我们首先要解决session的统一来保证无论用户的请求被转发到哪个服务器上都能保证用户的正常使用,即需要实现...

    自定义session存储机制避免会话保持问题

    1. 拿出单独的一台服务器使用NFS或Samba文件共享方式,共享session文件,可以解决负载均衡时会话不同步的问题。(但无法解决效率的问题,上万个session文件,查找会较慢) 2. session存数据库,其他服务器可以通过...

    JWT-Json Web Token-目前最流行跨域身份验证解决方案

    JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。传统的...

    nginx+redis实现session共享

    上一篇我们介绍了nginx实现的负载均衡和动静分离,可看这边。 我们在文章的末尾说到,...这是一个无法避免的问题,有若干的解决方案,归结起来都是要实现session等数据在各负载均衡分支中的同步,第一种想到的方案是把

    Nginx服务器详解加配置教程

    目录 常见WEB服务器 1 1、Nginx简介 2 2、反向代理Web服务器的“经纪人” 2 2.1反向代理初印象 2 2.2反向代理的作用 3 3、安装及配置 5 3.1下载 5 ...4.1.1 配置Tomcat的session共享可以有三种解决方案: 13

    MVC使用Memcache+Cookie解决分布式系统共享登录状态学习笔记6

    当我们将网站程序分部到多台服务器上后,由于Session受实现原理的局限,无法跨服务器同步更新Session,使得登录状态难以通过Session共享。  我们使用MemCache+Cookie方案来解决分布式系统共享登录状态的问题。  ...

    java版 jquery uploadify 通过Flash实现多文件上传 IE 和FireFox 兼容

    所以解决方案如下: 方法一:url中紧跟servlet/jsp文件名加;jsessionid=sessionId,其中sessionId由HttpSession.getId()得到,如http://localhost:8080/aaa/bbb.jsp;jsessionid=975FCCA6FD6058E92DDE932962A44252?...

    AnyFo - EricSofa:专门用于C/S结构的网络服务器中间件

    EricSofa提供了类似于Web服务器一样的“Application”与“Session”两片数据共享空间,开发者可以轻松的在自己的代码中使用这 两片空间进行服务器中的数据共享,为多线程程序中数据共享和安全的问题带来了很好的解决...

    Java思维导图xmind文件+导出图片

    session跨域共享及企业级单点登录解决方案实战 分布式事务解决方案实战 高并发下的服务降级、限流实战 基于分布式架构下分布式锁的解决方案实战 分布式架构实现分布式定时调度 分布式架构-中间件 分布式消息...

    dwz4j-demo

    dwz4j不仅仅是一个开发框架,还包括了一套完整的UI规范(包括前台UI规范和后台管理DWZ...服务器架构支持分布式部署规模大了可以加集群或负载均衡,已经实现多台服务器做集群或负载均衡解决各服务器之间的session共享问题

    Web应用的负载均衡、集群、高可用(HA)解决方案

    本文来自于csdn,本文主要介绍了7个相关的组件,关键概念及术语,常用Web集群方案,高可用(HA)和session共享等。——它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip...

    利用nginx解决cookie跨域访问的方法

    一、写在前面 最近需要把阿里云上的四台服务器的项目迁移到客户提供的新的项目中,原来的四台服务器中用到了一...因为每台服务器有两个项目,都用到单点登录,所以通过修改新的共享登录方式花费时间太多,于是在网上搜c

    NetSarang Xmanager Enterprise 6 Build 0175 中文多语免费版.zip

    它是一个一站式解决方案,这个软件包含有以下一些产品:Xmanager 3D(OpenGL),Xshell,Xftp 和 Xlpd。 Xmanager PCX Server Xmanager 是一个运行于 MS Windows 平台上的高性能的X window服务器。你可以在你的本地PC...

Global site tag (gtag.js) - Google Analytics