1.什么是会话(Session)

超文本传输协议(HTTP)被设计成一种无状态的协议。

所谓无状态协议就是指在服务器端的请求彼此相互之间是不认识彼此的,哪怕是来自同一个客户端的请求,相互之间也是不认识的,这个就叫做无状态

但要构建复杂的Web应用程序,就必须能够将来自同一个客户端的请求彼此关联起来。比如我们最常见的信息管理系统,一般要求用户先登录,后进行相关操作,而仅仅通过无状态协议实现这个功能是非常麻烦,而且不安全的。

由于请求彼此之间相互不认识,因此尝试修改用户信息的请求无法依赖于登录认证的请求所提供的身份认证信息,而只能每次在请求时自己携带登录信息,这样会造成额外的数据负担,并且非常不安全。

因此,需要有一种机制,能够让来自同一个客户端的请求彼此之间能够认识,这种机制被称为会话。

2.会话的实现
会话的实现分为两个部分,首先是要让来自同一个客户端的请求能够彼此相互认识;其次是来自同一个客户端的请求能够在服务器端共享数据。为什么这么说?

让每个来自客户端的请求携带一个口令,来自同一个客户端的请求可能能够获取到相同的口令,这样来自同一个客户端的请求就能够彼此认识。之后请求可以利用这个口令在服务器端存储一些数据,其他请求可以利用口令来读写这些数据。这个就是会话实现的一个基本思路。

3.会话追踪机制(Session Tracking Mechanisms)

要给每个请求设置一个Token,来追踪请求属于哪个会话,被称为会话追踪。目前形成了几种不同的会话追踪策略,但是对于应用程序开发者来说,这些策略直接使用起来都比较麻烦。一般是有应用程序服务器所提供的实现。比如遵循Servlet 规范的Tomcat。

3.1.Cookie
通过HTTP Cookie技术进行会话追踪是最常用的会话追踪机制,也是所有的Servlet容器都必须支持的方式。

容器会发送一个cookie到客户端。然后客户端每次发送一个到服务器的请求时,都会带上这个cookie,这样就能够将这些请求关联到一个会话。

3.2.URL重写(URL Rewriting)
URL重写是使用范围最小的一种会话追踪机制。如果一个客户端不接收cookie,服务器可以使用URL重写来进行会话追踪。URL重写将一个会话ID拼接到URL中。

比如:http://www.myhost.com/oolong/index;jessionid=12345

因为URL重写技术会在多处暴露Session ID,因此如果可能的话,就尽量不使用URL重写技术。

3.3.隐藏表单
通过上面的两个例子,应该能够明白了所谓的会话追踪技术,实际上就是实现一种方式,能够确保客户端在请求服务器端时,能够携带一个身份认证的标志。

因此自然而然的隐藏表单也能够实现这种功能,因此也可以算是一种会话追踪方式。思路就是每个页面上存在一个隐藏表单,这个表单中存放着从服务器端获取的SESSION ID,每次提交请求时,将这个表单中的ID也一起发送到服务器。具体实现方式此处不表。

4.会话的创建
当来自一个客户端的请求首次访问一个应用程序时,是没有SESSION ID的,也就是没有Token,此时服务器会为这个请求创建一个SESSION ID,并且在服务器段开辟一块空间作为这个会话所共享的数据存储区域。

然后当这个请求返回时,会将服务器端创建的这个SESSION ID一起带回客户端,之后每次来自这个客户端的请求,都会携带者这个SESSION ID

5.在会话中绑定值
会话最常用的一个功能是用来做用户登录来自同一个客户端的请求使用一个被称为SESSION ID的Token在服务器端存储一些共享数据。同一个客户端的不同请求因为拥有相同的SESSION ID,因此能够共享属于这个客户端的会话空间,也就能够在里面读写数据。这个被称为在会话中绑定值

6.会话超时(Session Timeouts)
由于每个客户端在访问服务器端时都会占用服务器端一定的系统资源,而服务器端的系统资源是有限的,为了提高利用效率,因此服务器端针对每一个会话的共享空间是有一定的时效性的。超过这个时间,服务器端会自动将这个会话在服务器中所占用的系统资源释放掉,换而言之,这个会话中的数据丢失,会话失效了。

这个会话超时时间是可以设置的,相关的有一些机制可以更智能的计算合理的会话时间,就不在此表述了。

参考

[1] JSR-000340 Java Servlet 3.1 Specification

Servlet——理解会话Session的更多相关文章

  1. 理解会话Session

  2. [转载]深入理解HTTP Session

    深入理解HTTP Session   session在web开发中是一个非常重要的概念,这个概念很抽象,很难定义,也是最让人迷惑的一个名词,也是最多被滥用的名字之一,在不同的场合,session一次的 ...

  3. 重温Servlet学习笔记--session对象

    session的类型是属于HttpSession,HttpSession是由javaWeb提供的,用来会话跟踪的类.session是服务器端对象,保存在服务器端. HttpSession是servle ...

  4. 理解HTTP session原理及应用

    转自:http://www.2cto.com/kf/201206/135471.html 一.术语session在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣 ...

  5. [serverlet][转载: 深入理解HTTP Session]

    [serverlet][转载: 深入理解HTTP Session] 标签(空格分隔): 未分类 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. ...

  6. 深入理解HTTP Session

    深入理解HTTP Session   session在web开发中是一个非常重要的概念,这个概念很抽象,很难定义,也是最让人迷惑的一个名词,也是最多被滥用的名字之一,在不同的场合,session一次的 ...

  7. {转} 深入理解 HTTP Session

    session在web开发中是一个非常重要的概念,这个概念很抽象,很难定义,也是最让人迷惑的一个名词,也是最多被滥用的名字之一,在不同的场合,session一次的含义也很不相同.这里只探讨HTTP S ...

  8. 简单PHP会话(session)说明

    现在程序员愈发的不容易了,想要精通,必然要寻本溯源,这其实与目前泛滥的愈发高级的语言以及众多的框架刚好相反,因为它们在尽可能的掩盖本源使其简单,个人称之为程序员学习悖论. 注:作者接触web开发和ph ...

  9. jfc在jsp页面画图,不将图片存在服务器端,只存入会话session(可用)

    jfc在jsp页面画图,不将图片存在服务器端,只存入会话session.其中主要用到jfc的一个servlet类. <%@ page contentType="text/html;ch ...

随机推荐

  1. CSS—BFC原理解析与应用

    我们在很多地方都见过BFC这个词,或许能够知道大概意思,但是有时候它的具体原理以及作用会记得很模糊,下面就对BFC这个概念深入学习下. 块级格式化上下文(Block Formatting Contex ...

  2. umi+antdpro 2.3

    关于umi接管了路由之后的动态配置. 路由通过 router.js 配置文件自动生成. 在 models/ menu.js中可以获取到,但从这里获取到并过滤之后的其实不是路由配置. 正确过滤方式,通过 ...

  3. Windows问题

    常用工具 DisplayFusion 官网 电脑分屏,V9.4 Pro 破解版 问题解决 Win64位注册表导入方法 64位Windows操作系统注册表不同于32位Windows操作系统,Win64 ...

  4. Linux基础知识之文件的权限(二)

    除了基本的r,w,x之外,在linux传统的ext2.ext3.ext4文件系统下,还可以设置其他 的文件属性.如chattr,lsattr,而在CentOS7中默认利用xfs作为默认的文件系统,就不 ...

  5. 不能使用 float 和 double 来表示金额等精确的值

    不能使用 float 和 double 来表示金额等精确的值 关于面试,金额用什么数据类型? 不是 doube,更不是 float ,而是用 BigDecimal.对于金融项目,对于金额,误差是不能容 ...

  6. HDU - 6223 Infinite Fraction Path (倍增+后缀数组)

    题意:给定一个长度为n(n<=150000)的字符串,每个下标i与(i*i+1)%n连边,求从任意下标出发走n步能走出的字典序最大的字符串. 把下标看成结点,由于每个结点有唯一的后继,因此形成的 ...

  7. 原生 JS实现一个简单分页插件

    最近做的一个 PC端的需求,这个需求中有一个小点,页面底部有一块列表区域,这个列表的数据量比较大,需要进行分页控制,切换页码的时候,发送一个 ajax请求,在页面无刷新的情况下,实现列表数据的刷新,所 ...

  8. 多个Promise执行顺序

    app.isLogin() // 判断是否登录后 .then(res=>{ this.setData({ login: true }, res2=>{ // 清空临时积分 return a ...

  9. Newnode's NOI(P?)模拟赛 第二题 dp决策单调优化

    其实直接暴力O(n3)DP+O2O(n^3)DP+O_2O(n3)DP+O2​优化能过- CODE O(n3)O(n^3)O(n3) 先来个O(n3)O(n^3)O(n3)暴力DP(开了O2O_2O2 ...

  10. Acwing-166-数独(搜索)

    链接: https://www.acwing.com/problem/content/168/ 题意: 数独是一种传统益智游戏,你需要把一个9 × 9的数独补充完整,使得图中每行.每列.每个3 × 3 ...