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服务器上多个资源,然后关闭浏览器,整个过程称之为一次会话. 需要解决的问题 每个用户在使用浏览器与服务器会话的过程中,会产生 ...
随机推荐
- 1、Java简介
Java SE: 最基础的部分,java的标准版本: Java EE: 企业版,(JSP.EJB.服务) Java ME:移动设备.游戏.通信 JVM: java virtual machine ...
- jquery Easy UI Datagrid(数据网格)学习心德,附API
第一步,引入主要的css样式和js文件 <meta http-equiv="Content-Type" content="text/html; charset=ut ...
- Windows系列和office系列通用激活工具KMSAuto
Windows系列和office系列通用激活工具KMSAuto KMSAuto 是一款俄罗斯人 Ratiborus 制作与设计开发的能够批量激活大客户授权版本的微软 Office 办公套件以及 Win ...
- Android Native 内存泄漏系统化解决方案
导读:C++内存泄漏问题的分析.定位一直是Android平台上困扰开发人员的难题.因为地图渲染.导航等核心功能对性能要求很高,高德地图APP中存在大量的C++代码.解决这个问题对于产品质量尤为重要和关 ...
- 数据结构-二叉树(1)以及前序、中序、后序遍历(python实现)
上篇文章我们介绍了树的概念,今天我们来介绍一种特殊的树--二叉树,二叉树的应用很广,有很多特性.今天我们一一来为大家介绍. 二叉树 顾名思义,二叉树就是只有两个节点的树,两个节点分别为左节点和右节点, ...
- canvas制作表单验证码
canvas是个非常强大的组件,网页上的验证码一般都是用服务器语言制作出来的 canvas同样是可以实现这个功能的 下面请观看效果图: 步骤呢其实也很简单 HTML部分: <form actio ...
- 个人永久性免费-Excel催化剂功能第69波-专业图表库新增图表-刘万祥老师中国地图
Excel催化剂的[专业图表库],仅提供一个工具的输出,让用户可以在制作专业图表过程中更低的门槛,更快速的完成所想要实现的图表.具体参考:第69波-打造最专业易用的商务图表库https://www.j ...
- Mybatis方法入参处理
1,在单个入参的情况下,mybatis不做任何处理,#{参数名} 即可,甚至连参数名都可以不需要,因为只有一个参数,或者使用 Mybatis的内置参数 _parameter. 2,多个入参: 接口方法 ...
- struct模块(用于对象的压缩)
6.27自我总结 struct模块 1.struct模块中的函数 函数 return explain pack(fmt,v1,v2-) string 按照给定的格式(fmt),把数据转换成字符串(字节 ...
- Gin框架 - 自定义错误处理
目录 概述 错误处理 自定义错误处理 panic 和 recover 推荐阅读 概述 很多读者在后台向我要 Gin 框架实战系列的 Demo 源码,在这里再说明一下,源码我都更新到 GitHub 上, ...