JavaWeb——使用会话维持状态
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——使用会话维持状态的更多相关文章
- JavaWeb——使用会话维持状态2
在这次的例子里面,将完成一类似购物车的功能,在客户访问网站的时候,会选中自己将要购买的商品,而购物车将始终维持着商品的状态,会话将联系起选择第一个商品(第一个请求),选择其他商品(其他请求)以及付款等 ...
- JavaWeb——使用会话维持状态3
这次的例子是使用会话给上一个例子添加登陆功能 1.页面逻辑 首先是登陆页面,这里需要输入账号和密码,输入正确后将进入商品列表页面,输入错误将会提示账号或者密码错误 其次是商品列表和购物车页面,添加了注 ...
- SqlServer性能急剧下降,查看所有会话的状态及等待类型---Latch_Ex
当某个数据库文件空间用尽,做自动增长的时候,同一时间点只能有一个用户人员可以做文件自动增长动作,其他任务必须等待,此时会出现Latch资源的等待.使用sp_helpdb查看业务数据库时发现:该数据库设 ...
- [原创]java WEB学习笔记28: 会话与状态管理Cookie 机制
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- JavaWeb(六):会话与状态管理
HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的 ,浏览器的每一次请求都是完全孤立的.即使 HTTP1.1 支持持续连接,但当用户有一段时间没有提交请求,连接也会 ...
- JavaWeb基础—会话管理之Cookie
一.什么是会话 打开浏览器,浏览各种资源,点击各种超链接,直至关闭浏览器,整个过程称为会话 二.会话管理的两种技术 1.Cookie 基于客户端.在客户端记录信息来确认用户身份.以cookie的形式写 ...
- JavaWeb基础: 会话技术简介
会话技术 用户使用Web应用的过程实际是调用了一系列的Servlet来组合处理请求,从而完成整个业务流.不同Servlet组合起来为用户服务的时候就会遇到一个数据共享和传输的问题,如何让多个Servl ...
- java_web学习(8)会话与状态管
HTTP简介 WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议.HTTP是hypertext transfer protocol(超文本传输协 ...
- JavaWeb基础 - 会话
会话概述 什么是会话 简单的理解:用户打开浏览器,点击多个超链接,访问Web服务器上多个资源,然后关闭浏览器,整个过程称之为一次会话. 需要解决的问题 每个用户在使用浏览器与服务器会话的过程中,会产生 ...
随机推荐
- Vue技术点整理-Vue CLI
Vue CLI 是一个基于 Vue.js 进行项目快速开发的脚手架 注:具体安装步骤可参考Vue CLI,默认安装的脚手架,是没有service.util等工具类的,以下主要描述如何在脚手架的基础上进 ...
- kuangbin专题 专题二 搜索进阶 哈密顿绕行世界问题 HDU - 2181
题目链接:https://vjudge.net/problem/HDU-2181 题意:一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发 ...
- spring boot admin抛出"status":401,"error":"Unauthorized"异常
打开spring boot admin的监控平台发现其监控的服务明细打开均抛出异常: Error: {"timestamp":1502749349892,"status& ...
- NOIP 2017 惊魂记
考完了NOIP三周后才开始补……然后又补了一周…… DAY -1: 晚上吃了一顿送行宴散伙饭,然后默默地看了一遍之前所有考试后写的题解,再读了几遍板子,然后和QTY一起和达哥又一次在外面谈了一个小时, ...
- LINUX安装源码软件经典三部曲
这几天一直在搞suse下的mplyaer.ffmpeg等源码编译安装,总结出源码软件安装三部曲,网上称为经典三部曲. 这三步分别为: 1. ./configure [options] 2. make ...
- OpenCV多版本切换和配置--opencv 安装与卸载、添加 opencv_contrib modules 以及 OpenCv 多版本切换
1. 查看安装Opencv的版本.以及libs和cflags $ pkg-config --modversion opencv $ pkg-config --cflags opencv // 编译链接 ...
- motion做摄像头(ZC3XX)移动物体监控系列问题
一:插入摄像头USB没有显示 gspca: video x creat 解决:cd /dev ls |grep video 进入/dev目录下,运行ls |grep video命 ...
- Excel催化剂开源第26波-Excel离线生成二维码条形码
在中国特有环境下,二维码.条形码的使用场景非常广泛,因Excel本身就是一个非常不错的报表生成环境,若Excel上能够直接生成二维码.条形码,且是批量化操作的,直接一条龙从数据到报表都由Excel完成 ...
- Storm之API简介
Storm之API简介 Component组件 1)基本接口 (1)IComponent接口 (2)ISpout接口 (3)IRichSpout接口 (4)IStateSpout接口 (5)IRich ...
- C#3.0新增功能09 LINQ 基础06 LINQ 查询操作中的类型关系
连载目录 [已更新最新开发文章,点击查看详细] 若要有效编写查询,应了解完整的查询操作中的变量类型是如何全部彼此关联的. 如果了解这些关系,就能够更容易地理解文档中的 LINQ 示例和代码示例. ...