Web核心之会话技术Cookie&Session
什么是会话技术?
http协议是无状态协议。为了满足在多次请求之间数据进行交互,推出了会话技术。
会话概念:一次会话,指的是从客户端和服务器建立起连接开始,到客户端或服务器断开连接为止。中间可能进行多次的请求和响应的过程。
会话分类:根据存储位置的不同,我们把会话技术分为两类。
客户端会话技术:Cookie
服务器端会话技术:Session
Cookie
Cookie入门,关闭浏览器后不保存cookie
创建并设置:
直接new即可,Cookie只有有参构造。Cookie是键值对格式的数据,
可以创建多个cookie对象,由于是键值对,key相同的cookie会被覆盖掉。

获取cookie:

演示:
先在浏览器中输入:http://localhost/ServletCookie
后再浏览器中输入:http://localhost/getCookie

原理
当我们设置cookie时,底层实际是在响应头中添加了一个set-cookie的头。里面设置了cookie的键值对。
当我们发送请求时,浏览器会自动把符合规则的cookie放入请求头中。使用cookie头携带cookie的键值对到服务器。
Cookie持久化,关闭浏览器依然保存cookie一段时间
- 默认情况下,Cookie会存储在浏览器的内存中。是一个临时数据,一旦会话结束(浏览器关闭),cookie就会被销毁掉。
- 当我们调用Cookie的setMaxAge()方法时,
如果指定一个正数,就可以把Cookie持久化。

Cookie的name要保持一致。
Cookie要删除,除了设置maxAge为0之外,还需要设置Cookie的path与要删除的cookie保持一致,如果要删除的Cookie有domain,也需要设置domain与其保持一致。

Cookie存储中文
理论上是不支持的。因为Cookie的数据是在头中,HTTP协议的头中不允许出现中文。
我们可以使用URL编码和解码的方式进行特殊字符的存储。
存储的时候:

获取的时候:

Cookie的有效路径setPath()
全局共享:
一个tomcat下部署的多个web项目能不能共享cookie信息需要设置setPath(),setPath("/")为服务器共享。

特定web项目共享:
此处指定一个路径,当浏览器发送请求时,如果请求的路径和指定的path规则相同,则会把该cookie携带过去。
setPath("/day16/aaa")
如果访问 http://localhost:8080/day16/servletDemo1,cookie是不会携带的
如果访问 http://localhost:8080/day16/aaa/servletDemo1,cookie是会携带的
默认共享范围:
如果不手动指定Path,cookie会设置一个默认的path。规则是:
请求某个资源,如果响应中设置了cookie,默认会根据该资源的访问路径,截取到最后一个/作为path。
例如:
假设访问http://localhost:8080/day16/aaa/servletDemo1,响应中返回了一个cookie,那么它的默认path为 /day16/aaa
假设访问http://localhost:8080/day16/servletDemo1,响应中返回了一个cookie,那么它的默认path为 /day16
因为默认设置十分混乱,所以推荐在设置cookie时,手动明确设置一个有效路径。
一般设置为项目的虚拟目录,或者 /
Cookie的有效域名setDomain()
一般指定一个一级域名, 当一级域名相同时,该cookie都会携带过来例如:setDomain(".baidu.com")
Cookie特点:
数据存放在客户端,安全性比较差
数据只能存储字符串,而且数据存储的大小和cookie的数量都有限制。
cookie一般用于存储少量的,对安全要求不高的数据。
例题:




Session
概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的HttpSession对象中。
服务器端会话技术:
域对象
作用范围:一次会话,每个不同的浏览器发起会话时创建不同的session,所以session是会话级的技术
创建:在一次会话中,服务器端第一次调用request.getSession()时会创建session





销毁:session存储在服务器,与浏览器无关
1. 服务器关闭
2. session.invalidate()session自杀
3. 如果session空闲时间超过配置的超时时间,则会自动销毁。
session的失效时间
在web.xml中配置即可:
细节:
当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
默认情况下,不是。因为客户端关闭后再次链接服务器,不再是原来的cookie头。
以下是两次session的地址,可见的确不同。

如何解决这种问题?(不推荐解决这种问题,违背设计初衷)
可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存


客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
不是,服务器都关了,session肯定没了。但是服务器关闭更新需要保留用户信息,这里需要服务器的钝化和活化。
session的钝化和活化
钝化(序列号):服务器正常关闭时,把内存中的session对象序列化到硬盘上进行存储。
注意:如果session中存储了对象,想要在钝化时把存储的对象也一并序列化。该对象必须实现序列化接口。
活化(反序列化):服务器启动时,把硬盘上的session文件反序列化到内存中,生成一个session对象,和之前存储的session对象的数据和id都一致。
获取:
request.getSession()
session的原理:
session底层是基于cookie实现的。在请求和响应时,cookie会存储或携带session的id进行交互。
第一次获取session,没有cookie,这时候会在内存中创建一个新的session对象,这个session有唯一id:xxxxxxxxxx
给浏览器做响应时,会把响应头的set-cookie:JSESSIONID=xxxxxxxxxx 发给浏览器。浏览器接收这个对象,
下次浏览器访问资源的时候就会携带这个响应头,通过请求头cookie携带JSESSIONID=xxxxxxxxxx 。
服务器会根据这个cookie信息里的JSESSIONID,去找这个session对象[HttpSession session = request.getSession();],
所以就找到了这个session对象,session对象唯一。服务器就是通过cookie的方式确保session在一次范围内多次获取是同一个。
Cookie和Session的区别
Cookie
1. 数据存放在客户端,安全性比较差
2. 数据只能存储字符串,而且数据存储的大小和cookie的数量都有限制。
3. cookie一般用于存储少量的,对安全要求不高的数据。
Session
1. 数据存放在服务器端,安全性比较高
2. 数据类型没有限制,大小和数量理论上也没有限制。
3. session一般用于存放一些私有数据。例如:登录后的用户信息、购物车信息……
一次性验证码实现
1. 验证
当验证码生成时,正确的验证码存入session中
提交的验证码和session中的进行比较
2. 保证一次性
一旦验证码从session中取出,就把它从session中移除掉。
Web核心之会话技术Cookie&Session的更多相关文章
- java ->会话技术Cookie&Session
会话技术Cookie&Session 会话技术简介 存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户 ...
- JavaWeb学习笔记五 会话技术Cookie&Session
什么是会话技术? 例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话 ...
- JavaEE之会话技术Cookie&Session
会话技术简介 存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪 里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并 ...
- 会话技术Cookie&Session
1.会话技术概述 从打开浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话.会话技术用于记录本次会话中客户端的状态与数据. 会话技术分为Cookie和Session: Cookie:数据存储 ...
- 会话技术 Cookie+Session
会话:这种在多次HTTP连接间维护用户与同一用户发出的不同请求之间关联的情况称为维护一个会话(session) 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开: 功能:在一次会话 ...
- 03012_会话技术Cookie&Session
1.会话技术简介 (1)存储客户端的技术 网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识 ...
- Django2.2 会话技术cookie session token的区别以及实例介绍
一.区别: 本人见解:使用自定义数据项进行加密,作为唯一身份识别,登陆时写入cookie(session基于这个).在显示相关数据 1.cookie 属于客户端会话技术(数据存储在客户端) 默认的Co ...
- Servlet 会话技术cookie和session
会话技术 Cookie技术:会话数据保存在浏览器客户端. Session技术:会话数据保存在服务器端. 一.Cooke技术 1. 特点 Cookie技术:会话数据保存在浏览器客户端. 2 .Cooki ...
- 会话技术cookie与session
目录 会话技术cookie 会话技术 cookie 服务器怎样把Cookie写 给客户端 服务器如何获取客户端携带的cookie session session简介 Session如何办到在一个ser ...
随机推荐
- CF 1182F Maximum Sine——根号算法
题目:http://codeforces.com/contest/1182/problem/F 注意有绝对值. 那么就是 k*p 对 q 取模,找最接近 \(\frac{q}{2}\) 的结果. 也就 ...
- [CSP-S模拟测试]:Market(背包DP)
题目描述 在比特镇一共有$n$家商店,编号依次为$1$到$n$.每家商店只会卖一种物品,其中第$i$家商店的物品单价为$c_i$,价值为$v_i$,且该商店开张的时间为$t_i$. $Byteasar ...
- 关于BSP,BIOS,和bootloader
BSP是板级支持包,是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板.BSP是相对于操作系统而言的,不同的操作系统对应于不同定 ...
- 相同name,取最小的id的值,mysql根据相同字段 更新其它字段
id name info1 a 1232 a 2353 a 1244 b 125 b 987相同name,取最小的id的值id name info1 a 1232 a 1233 a 1234 b 12 ...
- CodeIgniter 技巧 - 通过 Composer 安装 CodeIgniter 框架并安装依赖包
PHP 项目中,通过 Composer 来管理各种依赖包,类似 Java 中的 Maven,或 Node 中的 npm.CodeIgniter 框架要想通过 Composer 自动加载包也很简单,步骤 ...
- Git - 暂存区及撤销修改
1. 暂存区 每个 Git 仓库中,都有一个隐藏目录 .git 用于存放 Git 仓库的相关信息,包括暂存区(称为 stage).自动创建的 master 分支以及指向 master 分支的 HEAD ...
- WEB服务端安全---认证会话与访问控制
一.认证与会话管理 认证:简而言之就是通过一定的凭证认出用户是谁.认证过程中按凭证数量可简单分为 ‘单因素认证’.‘双因素认证’或多因素认证.一般来说,多因素认证强度更高,但是用户体验上会比单因素认证 ...
- Comprehensive Guide to build a Recommendation Engine from scratch (in Python) / 从0开始搭建推荐系统
https://www.analyticsvidhya.com/blog/2018/06/comprehensive-guide-recommendation-engine-python/, 一篇详细 ...
- Activation Functions and Their Derivatives
1. Sigmoid Function: when z=0,g'(z)=0.25 2. tanh Function: when x=0,tanh'(x)=1 3. Relu
- APT攻防整理-攻击方法/工具
攻击步骤 一般步骤 社工 武器制造 武器投递 漏洞利用 安装后门 后渗透 这5个阶段攻击非常隐蔽,可绕过传统安全设备检测 潜伏控制 传统通信方式不会使用,如cc/socket/http(可采用安全隧道 ...