1、会话的作用

  使用会话是为了维持状态,维持的是请求域请求之间的状态。因为HTTP请求自身是完全无状态的。从服务器的角度来看,当用户发出第一个请求开始,服务器无法将新的请求与之前的请求关联起来,举例说就是假如你当前的请求是登陆账号,下一个请求是查询信息,服务器端并不清楚这两个请求来自同一个客户。

  你也许认为IP地址可以作为唯一标识符,那么在某一个时间段来自同一IP地址的所有请求一定属于相同的客户端,但是其实这个是不一定的,就比如使用校园网的学生,这些学生使用的是相同的IP地址,他们真实的IP地址隐藏在路由之后。所以所有的HTTP服务器端技术都普遍采用HTTP会话的机制。

2、会话cookie和URL重写

  在Web会话中,容器和用户浏览器将通过某种方式连接起来,出于这个原因,通常会话会被赋予一个随机生成的字符串,称为会话ID。第一次创建会话的时候(即收到请求时),创建的会话ID会作为响应的一部分返回到用户的浏览器中,接下来从该用户浏览器中发出的请求都将通过某种方式包含该会话ID,通过这个会话ID把请求关联起来。

  将会话ID从服务器返回到浏览器中使用的有两项技术:会话cookie和URL重写

  • 会话cookie是HTTP的一种通信机制,通过Set-Cookie响应头在服务器之间传递任意数据,并存储在用户的计算机中,然后在;通过请求头Cookie从浏览器返回到服务器从。

   cookie可以 有各种不同的特性,例如域名、路径、过期日期或最大生命周期、安全标志只含HTTP的标志  

   这是浏览器和服务器之间的一系列HTTP请求和响应的头数据

   

    第一个响应中的Set-Cookie头将用于将cookie发送到用户浏览器,在Java EE应用服务器中会话cookie的名字默认为JSESSIONID,收到第一个响应之后浏览器会把cookie存储在用户计算机本地,请求的Cookie头也将用于将cookie发送回服务器。

  • URL中的会话ID

   Java应用程序中将会话ID添加到URL的最后一个路径段(或目录)采用这种方式分离会话ID和查询字符串的参数,使他们不会互相冲突,例如:

http://localhost:/hello-world/shop;JSESSIONID=7F2E3989B7780DE?action=view

  将会话ID内嵌在URL中可以避免使用cookie,那么第一次如何将请求URL中的会话ID发送到浏览器呢?下面的头信息将演示如何通过URL内嵌完成与cookie相同的工作的。

 在这个例子中,浏览器通过Location头返回会话ID,浏览器从未真正意识到会话ID的存在,只是重写location头中的URL以及任何响应内容的URL,是所有访问服务器的URL都内嵌此会话ID。

3、在Web.xml中配置会话

  在许多情况下,都可以直接使用HTTP会话,不需要添加显示的配置,不过默认的设置始终是不够的,所以我们可以在Web.xml中使用<session-config> 标签配置会话,下面列出了部署描述符所有可能用于设置会话的标签。

<session-config>
<session-timeout></session-timeout>
<cookie-config>
<name>JSESSIONID</name>
<domain>example.org</domain>
<path>/shop</path>
<comment>
<!-- some information -->
</comment>
<http-only>true</http-only>
<secure>false</secure>
<max-age></max-age>
</cookie-config>
<tracking-mode>COOKIE</tracking-mode>
<tracking-mode>URL</tracking-mode>
<tracking-mode>SSL</tracking-mode>
</session-config>

  所有在<session-config>和</cookie-config>中的标签都是可选的,但是如果使用了这些标签,就必须按照上面的顺序添加到Web.xml中。

  然后是每个标签的意义:

  • 标签<session-timeout>指定了会话在无效之前,可以保持不活跃状态的时间,以分钟为单位。如果该值小于等于0,那么会话将永远也不过期。如果不设置该值那么将使用容器的默认值.
  • 标签<name>可以自定义会话cookie的名字。默认值为JSESSIONID
  • 标签<domain>将告诉浏览器应该把cookie发送到那个域名中
  • 标签<path>进一步的将cookie限制在了某个特定的URL中
  • 标签<comment>将在会话ID cookie中添加Comment特性,在其中可以添加任意文本。这通常用于解释cookie的目的,并告诉用户网站的隐私策略。
  • 标签<http-only>若为真将会把cookie限制在直接的浏览器请求中,例如JavaScript和Flash将无法访问cookie
  • 标签<secure>若为真浏览器只会通过HTTPS发送cookie,这将保护cookie,避免以未加密的方式进行传输
  • 标签<max-age>指定了cookie的Max-Age特性,用于控制cookie何时过期。默认情况下,cookie没有过期日期,这意味着它将在浏览器关闭时过期。可以自定义该值,单位为秒
  • <tracking-mode>用于表示容器应该使用哪种技术追踪会话ID,它的合法值有:
       URL----容器将只在URL中内嵌会话ID 。不使用cookie或SSL会话ID。这种方式非常不安全。
       COOKIE -----容器将使用会话cookie追踪会话ID 。该技术非常安全。
       SSL ----容器将使用SSL会话ID作为HTTP会话ID。该方法是最安全的方式,但要求使用的所有请求都必须是HTTPS请求。

  

JavaWeb——使用会话维持状态的更多相关文章

  1. JavaWeb——使用会话维持状态2

    在这次的例子里面,将完成一类似购物车的功能,在客户访问网站的时候,会选中自己将要购买的商品,而购物车将始终维持着商品的状态,会话将联系起选择第一个商品(第一个请求),选择其他商品(其他请求)以及付款等 ...

  2. JavaWeb——使用会话维持状态3

    这次的例子是使用会话给上一个例子添加登陆功能 1.页面逻辑 首先是登陆页面,这里需要输入账号和密码,输入正确后将进入商品列表页面,输入错误将会提示账号或者密码错误 其次是商品列表和购物车页面,添加了注 ...

  3. SqlServer性能急剧下降,查看所有会话的状态及等待类型---Latch_Ex

    当某个数据库文件空间用尽,做自动增长的时候,同一时间点只能有一个用户人员可以做文件自动增长动作,其他任务必须等待,此时会出现Latch资源的等待.使用sp_helpdb查看业务数据库时发现:该数据库设 ...

  4. [原创]java WEB学习笔记28: 会话与状态管理Cookie 机制

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. JavaWeb(六):会话与状态管理

    HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的 ,浏览器的每一次请求都是完全孤立的.即使 HTTP1.1 支持持续连接,但当用户有一段时间没有提交请求,连接也会 ...

  6. JavaWeb基础—会话管理之Cookie

    一.什么是会话 打开浏览器,浏览各种资源,点击各种超链接,直至关闭浏览器,整个过程称为会话 二.会话管理的两种技术 1.Cookie 基于客户端.在客户端记录信息来确认用户身份.以cookie的形式写 ...

  7. JavaWeb基础: 会话技术简介

    会话技术 用户使用Web应用的过程实际是调用了一系列的Servlet来组合处理请求,从而完成整个业务流.不同Servlet组合起来为用户服务的时候就会遇到一个数据共享和传输的问题,如何让多个Servl ...

  8. java_web学习(8)会话与状态管

    HTTP简介       WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议.HTTP是hypertext transfer protocol(超文本传输协 ...

  9. JavaWeb基础 - 会话

    会话概述 什么是会话 简单的理解:用户打开浏览器,点击多个超链接,访问Web服务器上多个资源,然后关闭浏览器,整个过程称之为一次会话. 需要解决的问题 每个用户在使用浏览器与服务器会话的过程中,会产生 ...

随机推荐

  1. 视图系统CBV 和 response

     CBV和FBV FBV(function based view ) CBV(class based view) 1. CBV的定义 # 增加出版社 CBV from django.views imp ...

  2. React躬行记(7)——表单

    表单元素是一类拥有内部状态的元素,这些状态由其自身维护,通过这类元素可让用户与Web应用进行交互.HTML中的表单元素(例如<input>.<select>和<radio ...

  3. Java底层技术系列文章-hashcode深入理解

    带着问题去理解: 1. Object类HashCode方法是如何实现的,和String类有什么区别? 2.HashCode和Equals之间的关系? 一.hashCode作用 hashCode方法返回 ...

  4. C4.5和ID3的差别

    C4.5和ID3的差别 决策树分为两大类:分类树和回归树,前者用于分类标签值,后者用于预测连续值,常用算法有ID3.C4.5.CART等. 信息熵 信息量:   信息熵: 信息增益 当计算出各个特征属 ...

  5. Nodejs监控Apple召回计划&邮件提醒

    最近,我的MacBook Pro 2015款13寸电池膨胀了 把笔记本平放在桌面,四个脚中的前两个无法落地,笔记本盖合上之后,屏幕上会印上键盘的纹路,也就是说,笔记本C面D面变形了,已经购买超过3年, ...

  6. 我狠起来连自己都打---如何简单实现Azure resource自动打标签

    你是否还在为花费大量Azure Resource打标签而烦恼呢?你是否还在因为这样低效的重复劳动而痛苦呢? 在很长一段时间内,笔者既要做云架构调整,又要做日常系统维护,还要参与各种各样的项目,在这种情 ...

  7. C++里long的字节数

    标准规定long的大小不小于int也就是说sizeof(long)>=sizeof(int). Numerical type sizes in C (bits) Platforms  \   T ...

  8. 史上最全IO流详解,看着一篇足矣

    一:要了解IO,首先了解File类 File类里面的部分常量,方法 No. 方法或常量 类型 描述 1 public static final String pathSeparator 常量 表示路径 ...

  9. excel表数据生成定长txt数据

    项目作业中需要造数据,从txt文件中获取定长数据,直接从txt中修改,会显得十分麻烦,于是便利用excel自带的vba写了一个小工具.效果如下: A1表示字段名,A2表示长度,A3是数据,也可以增加字 ...

  10. linuk相关命令

    1,Linux的每个文件一般都有三个权限 r--读,w--写,x--执行,其分别对应的数值为4,2,1. 输入ll可以查看到文件的权限. 2,给目录或文件授权 chmod 777 目录名 chmod ...