Servlet之四 Session的了解和学习

一、什么是Session?

    Session直译比较困难,一般译成会话或时域。在计算机科学领域来说,尤其是在网络领域,Session是一种持久网络协议,在用户(或用户代理)端和服务器端之间建立关联,从而起到交换数据包的作用机制,Session在网络协议(例如telnet或FTP)中是非常重要的部分。

    在不包含会话层(例如UDP)或者是无法长时间驻留会话层(例如HTTP)的传输协议中,会话的维持需要依靠在传输数据中的高级别程序。例如,在浏览器和远程主机之间的HTTP传输中,HTTP Cookie 就会被用来包含一些相关的信息,例如Session ID,参数和权限信息等

以上内容出自维基百科:http://zh.wikipedia.org/zh-cn/%E4%BC%9A%E8%AF%9D_(%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6)

——————————————————————————————————————————————————————————————————————————————

    Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。以及如果需要的话,可能还有一定的操作空间。

    具体到Web中的Session指的就是用户在浏览某个网站时,从进入网站到关闭这个网站所经过的这段时间,也就是用户浏览这个网站所花费的时间。因此,从上述的定义中可得:Session实际上是一个特定的时间概念。

    需要注意的是,一个Session的概念需要包括特定的客户端,特定的服务器端以及不断地操作时间。A用户和C服务器建立连接时所处的Session同B用户和C服务器建立连接时所处的Session是两个不同的Session。当一个Session第一次被启动时,一个唯一的标识被存储于本地的cookie中。

以上内容出自百度百科:http://baike.baidu.com/view/25258.htm

—————————————————————————————————————————————————————————————————————————————

     二、为什么要用Session?

     谈及Session一般是在Web应用的背景之下的,Session管理(或Session追踪)是Web应用程序开发中一个非常重要的主题。我们知道Web应用是基于HTTP协议的,而HTTP协议恰恰是一种无状态协议,也就是说,用户从A页面跳转到B页面会重新发送一次HTTP请求,而服务器端在返回相应的时候是无法获知该用户在请求B页面前做了什么的。即:对服务器而言,用户每打开一个页面都是一个全新的请求,因为服务器不保存客户端的状态信息,所以,在默认情况下,Web服务器不知道一个HTTP请求是来自初次请求,还是之前已经访问过的用户请求。

       对于HTTP的无状态性的原因,相关RFC里并没有解释,但是联系到HTTP的历史以及应用场景,我们可尝试进行一些推测:

        1.  设计Http最初的目的是为了提供一种发布和接收HTML页面的方法。那个时候没有动态页面技术,只有纯粹的静态HTML页面,因此,根本不需要协议能保持状态。

         2.  用户在收到响应时,往往要花一些时间来阅读页面,因此如果保持客户端和服务器端之间的连接,那么这个连接在大多数的时间里都将是空闲的,这是一种资源的无端浪费。所以HTTP原始设计是默认短连接,即客户端和服务器端完成一次请求和响应之后就断开TCP连接,服务器因此无法预知客户端的下一个动作,它甚至都不知道这个用户会不会再次访问,因此让HTTP协议来维持用户的访问状态也全然没有必要。

         3. 将一部分复杂性转嫁到以HTTP协议为基础的技术之上,可以使得HTTP在协议这个层面上显得相对简单,而这种简单也赋予了HTTP更强的扩展能力。事实上,Session技术从本质上讲也是对HTTP协议的一种扩展。

      总而言之,HTTP的无状态性是有其历史使命决定的。但是随着网络技术的蓬勃发展,人们在也不满足于死板乏味的静态HTML,人们希望Web应用能动起来,于是客户端出现了脚本和DOM技术,HTML里增加了表单,而服务器端出现了CGI等等动态技术。

      而正是这种Web动态化的需求,给HTTP协议提出了一个难题:一个无状态的协议怎样才能关联多次连续的请求呢?也就是说无状态的协议怎样才能满足有状态的需求呢?

       此时,有状态是必然的趋势,而协议的无状态性也木已成舟,因此我们需要一些方案来解决这个矛盾,来保持HTTP连接的状态,于是出现了cookie和Session。

       对于此部分内容,会有一些疑问,在此先谈两点:

              1.  无状态性和长连接

                可能有人会问,现在被广泛使用的HTTP1.1默认使用长连接,他还是无状态的吗?

                  连接方式和有无状态是完全没有关系的两回事。因为状态从某种意义上来讲就是数据,而连接方式只是决定了数据的传输方式,而不能决定数据。长连接是随计算机性能的提高和网络环境的改善所采取的一种合理的性能上的优化,一般情况下,Web服务器会对长连接的数量进行限制,以免资源的过度消耗。

                2.  无状态性和Session

                    Session是有状态的,而HTTP协议是无状态的,二者是否矛盾呢?

                       Session和HTTP协议属于不同层面的事物,后者属于ISO七层模型的最高层应用层,前者不属于后者,前者是具体的动态页面技术来实现的,但同时它又是基于后者的。

以上内容出自360doc:http://www.360doc.com/content/12/0117/16/1073512_180013308.shtml

—————————————————————————————————————————————————————————————————————————————

三、Session的使用和实现总述

      Session是用于保持状态的基于Web服务器的方法。Session允许通过将对象存储在Web服务器的内存中在整个用户会话过程中保持任何对象。

      Session通常用于执行以下操作:

          (1)存储需要在整个用户会话过程中保持其状态的信息,例如登录信息或用户浏览Web应用程序时需要的其他信息。
          (2)存储只需在页面重新加载过程中或按功能分组的一组页面之间保持其状态的 对象。
              Session的作用就是它在Web服务器上保持用户的状态信息供在任何时间从任何页面访问。 因为浏览器不需要存储任何这种信息,所以可以使用任何浏览器,即使是像Pad或手机上的浏览器。

         持久性方法的限制:

              随着越来越多的用户登录, Session所需要的 服务器内存量也会不断增加。
              访问Web应用程序的每个用户都生成一个单独的Session对象。每个Session对象的持续时间是用户访问的时间加上不活动的时间。
               如果每个Session中保持许多对象,并且许多用户同时使用Web应用程序(创建许多Session),则用于Session持久性的服务器内存量可能会很大,从而影响了可伸缩性。

以上内容出自百度百科:http://baike.baidu.com/view/25258.htm

—————————————————————————————————————————————————————————————————————————————



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值