分布式web应用session机制研究

标签: 分布 web 应用 | 发表时间:2014-03-22 16:59 | 作者:hmilym1050636281
出处:http://blog.csdn.net

session机制对于初学者来讲是有些难于理解的,在此探讨一下session的机理。希望对读者能够提供帮助。

   由于http协议是一种无状态的协议。即协议本身并没有规定建立连接的客户端和服务器端之间需要存储一些内容。但是随着web技术的发展以及互联网商业的兴起,为了构建更加复杂的更加人性化的网络应用,必须有一种机制来保存客户端和服务器端连接的信息。比如最简单的登录功能。在早期的互联网中html被设计用来显示网页文档,却没有考虑如何用html构建可以交互的类似于客户端软件用户体验的机制。因为http协议是无状态的,也就从协议层面无法解决登录的问题。为了解决这种问题,才产生了session的机制。

  实际上,session的原理很简单。就是浏览器维护一个web应用生成的唯一的标示,当发送请求时这个唯一标示被传递到web应用,web应用根据此标示找到之前用户存储在web应用中的信息。

常见的维护session机制有以下几种方式。

1. 如果浏览器没有给web服务器唯一标示,web服务器则认为这个用户第一次使用,生成一个唯一标示并将唯一标示通过响应头中的 Set-Cookie:传递给浏览器,浏览器处理后将唯一标示存储以备下一次向web服务器发出请求时添加唯一标示信息。此唯一标示可以存储在浏览器中的cookie中或者直接写在url里面,以方式浏览器禁用cookie的情况。

2.还有一种方式,就是直接将session中的信息对称加密后直接存储在浏览器中的cookie中。浏览器负责管理cookies。


针对于第一种session机制服务器存储session主要有以下几种方式。

1. 直接存储在web服务器的内存中。实际上就是一个键值对, 键为维护session的唯一标示,值为session的内容。web应用负责从http请求中获取唯一标示,这样web端代码就可以访问拿到之前存储的session了。

2. 将session信息存储在数据库中,数据库可以选择postgresql、mysql等关系数据库,也可以选择mongodb、redis等nosql产品。这样就节省了web服务器的内存占用。


针对于第二种session机制session本身就不需要在web服务器中存储,因为session信息浏览器都会传递到web应用中,web应用直接解密即可使用。


在web应用服务器为单机的情况下,此种以上session机制没有问题,但是睡着网络应用越来越发达,现代web应用的典型架构都为分布式集群环境。此时session机制会出现一些问题需要解决。

1. 如果后端web应用服务器多余两个,在内存存储session的情况下会出现问题。因为反向代理会转发请求到后端的任何一台web应用服务器,可能出现用户本来为登陆状态突然变成未登录状态等类似的现象。解决方法有两个:

      1).修改反向代理的负载均衡算法,比如改为 ip hash算法等能够将同一个浏览器的不同请求路由到同一台web应用服务器的算法。

      2)  .session机制采用第二种,web应用不存储session,当然也就没有这个问题了。

      3)采用session共享机制。一种是单列出来一台服务器作为session服务器供其他web应用服务器查询session使用。或者多个web应用服务器间建立沟通机制做到一台web应用服务器和其他web应用存储的session一致。第二种同步session机制在web服务器较多的情况web应用性能会下降的很厉害,不建议使用。

2. 第二种session机制中,由于session本身存储于cookie中,而cookie有大小限制。所以使用此种session机制的应用只能存储一些简单的如userId等简单内容。


作者:hmilym1050636281 发表于2014-3-22 8:59:49 原文链接
阅读:41 评论:0 查看评论

相关 [分布 web 应用] 推荐:

分布式web应用session机制研究

- - CSDN博客互联网推荐文章
session机制对于初学者来讲是有些难于理解的,在此探讨一下session的机理.    由于http协议是一种无状态的协议. 即协议本身并没有规定建立连接的客户端和服务器端之间需要存储一些内容. 但是随着web技术的发展以及互联网商业的兴起,为了构建更加复杂的更加人性化的网络应用,必须有一种机制来保存客户端和服务器端连接的信息.

从 Newsstand 到 Web 应用

- - 爱范儿 · Beats of Bits
本地应用和 HTML5 谁将主导的争论持续了好几年,目前本地应用依然是绝对主流. 因此英国《金融时报》上周宣布将在 6 月 撤下 iPad 应用,完全依赖 HTML5 Web 应用的消息引来不少关注. 早在去年苹果宣布订阅政策时,《金融时报》就开始着手准备 Web 应用以绕开苹果 30% 的大刀.

从 Web 站点到 Web 应用程序,第 1 部分: Web 站点还是 Web 应用程序?

- iworm - IBM developerWorks 中国 : 文档库
您构造的是 Web 站点还是 Web 应用程序. 一般来说,Web 站点主要提供信息,而 Web 应用程序互动性更强,但二者的界限已越来越模糊. 构造好的站点的最佳实践与构造好的应用程序的最佳实践不尽相同. 通过本文了解 Web 站点与 Web 应用程序之间真实确切的差异,然后分析您自己的站点. 以一种能帮助您改进设计和可用性的方式探索您正在管理、设计、编码的站点.

Java Web应用Web层异步化应该考虑的问题

- - 企业架构 - ITeye博客
        之前做了一个项目,要用到web层的异步化技术,在实际实现中,遇到了很多问题,作为教训简单罗列下. 1、app 容器/J2EE框架对异步的支持.         在tomcat5、jboss4的时候,每一个请求都用了一个app容器线程来执行,app线程必须一直处理完或者等待别的线程处理完,才能拿着请求的链接把结果写回到客户端.

Web开发者必备:Web应用检查清单

- - ITeye博客
想做一个高质量的Web应用,前前后后要做的事情非常多. 国外开发者 Ata Sasmaz 为 Web 开发者制作分享了一份检查清单,包括应用开发、性能、安全、分析、可用性、可靠性、转换策略、竞争策略这些方面需要注意的事项. 清单内容可能不全面,欢迎大家在评论中补充. JavaScript 允许捕获异常.

基于HT for Web的Web SCADA工控移动应用

- - ITeye博客
最近客户采用 HT for Web图形界面组件,实现了油田燃气管网和供水管网等工控SCADA的HMI人机界面,并将系统运行在平板和手机等Android和iOS移动终端,在此我们在技术支持过程中的一些知识点进行些梳理和分享,希望对有志于Web SCADA领域的伙伴们提供些帮助. 移动终端呈现方面,HMI界面布局应用和游戏领域有类似的问题,一般对横版或者竖版会有更好的布局效果,例如有些游戏只支持横版的玩法,这对于采用Native的App应用来说不成问题,可将App配置成只能横向或者纵向布局,但对于移动终端浏览器就有点尴尬,目前大部分终端你是不能限制用户旋转平面导致布局变化.

优秀的WEB应用程序

- DayuLu - 互联网的那点事
今天我们将分享给大家一批优秀的WEB应用程序. 比如,大家可能用过在线的调色工具,Adobe也推出过在线的Photoshop软件. 这些程序或许就是未来软件程序的基础. 随着云处理和网络速度的飞速发展,这将是个好的趋势. 人们只需要一台在线的电脑就可以找到需要的应用程序,而不需要在自己电脑上安装复杂的文件.

Web应用程序的开发步骤

- xxg - 月光博客
  如今已进入了web2.0高速发展的互联网时代,各种互联网的Web应用程序如雨后春笋般出现. 那么作为一名Web开发人员,怎样去开发一款优秀的Web应用程序呢. 这个问题没有一个简单的答案,甚至那些教育机构都未必能清楚的知道. 所以,像大多数在这个领域里的web开发人员一样,我们只是通过去做,去实验才学会了这些.

提升 web 应用程序的性能

- pathfinder - IBM developerWorks 中国 : 文档库
作为 web 用户,我们知道页面加载或刷新的速度对其成功至关重要. 本文将帮助您更好地理解影响 web 应用程序性能的因素. 学习识别这些问题并且找到客户端内容的瓶颈. 探索 JavaScript、DOM、CSS 和 Dojo 小部件的性能问题. 将通过一个例子展示使用 YSlow 和 Firebug 适当调整 Dojo 小部件.

Google发布Chrome Web Store应用商店

- Levi - 月光博客
  Google公司今天在美国举行Chrome相关产品发布会,发布会上正式发布谷歌浏览器应用商店(Chrome Web Store)和Chrome OS操作系统.   Google推出的应用商店Chrome Web Store是互联网开放平台应用的一个典型案例,该应用商店提供各种适用于Chrome和Chrome OS的应用程序,目标用户群为1.2亿Chrome浏览器用户,开发者可以在Chrome应用程序商店销售自己的应用程序,并获得收入.