JavaWeb_Day4

Cookie

协议状态

有状态:有储存数据的功能,服务器可以通过协议判断和上一个请求的关系

无状态:没有储存数据的功能,服务器不能仅通过协议判断和上一个请求的关系,我们常用的HTTP协议就是无状态的协议,但是我们可以通过一些手段(加请求头)转换为有状态

传递流程

1、Client发送HTTP请求给Server,Server判断本次请求是否带有Cookie

2、如果没有携带Cookie,Server会在本次响应头中携带Set-Cookie响应头,将Cookie信息存在这个响应头中

new Cookie(key,value)(value默认是英文,其他字符需要使用URLEncode.encode())-->addCookie

3、Client一旦读取到响应头中的Set-Cookie,就会创建一个Cookie(File)并储存在浏览器中,之后请求Server的时候会再次把Cookie信息放在请求头(Cookie)中

4、Server通过读取请求头中携带的Cookie来判断两次请求是否为同一人操作

getHeader("Cookie"):获取本次传递的Cookie的value,Decode.encode:解码字符

resp.getCookies():获取前端传递的所有Cookie

Cookie的生命周期

客户端收到响应头SetCookie时创建,默认情况下浏览器关闭时销毁,其次以设置过期时间为准(setMaxAge(int expiry)设置Cookie的过期时间(s)手动销毁/替换),删除Cookie时,该Cookie必须匹配当时的携带路径)

setPath("/")设置Cookie的路径为全局,默认的Cookie路径是当前Servlet所在的路径

Session

Session与Cookie不同,Cookie会将数据存放在浏览器磁盘中,键和值都是,Session是属于服务器端的会话,数据保存在服务器的内存中 ,每个会话中会保存自己的数据,其他会话不能访问,不能共享

常用方法

如果不存在就创建:req.getSession

获取SessionID,唯一的32位十六进制数:getId()

Session创建时间:getCreationTime()

上次访问的时间:getlastAccessedTime()

判断Session是否为新创建:isNew

setAttribute(key,value):存键值对,value存的是Java对象,可以存储中文

getMaxInactiveInterval:获取Session剩余的时间(默认1800s)

invalidate:立即销毁

生命周期

在服务器获得新会话请求时/找不到相同SessionID时通过getSession()创建

默认无操作30分钟后销毁/在服务关闭时销毁

(浏览器上的SessionID是储存在Cookie中的,随着浏览器的关闭销毁Cookie,SessionID也一同销毁,因此服务器无法判断这是同一次会话,下次访问会创建新的Session,可以通过创建Cookie(key为JSESSIONID)时附加销毁时间来延时销毁)

传递流程

1、第一次请求如果没有携带Cookie中的Session信息,服务器就调用setSession方法,创建Session,通过Cookie发送给浏览器

2、浏览器获得SessionID,下次访问回发给服务器

3、服务器通过Cookie中的ID与Session中的ID进行对比,访问同一个会话中的数据,不会再次给浏览器回发

Session的持久化

方法1:

持久化Cookie

方法2:

序列化Session

对象必须实现Serializable接口

钝化:从内存到磁盘

活化:从磁盘到内存

invalidate删除也会将磁盘中的文件删除

Cookie和Session的区别

Cookie是存在客户端的,Session是存在服务器的,在客户端上保存的Session是保存在Cookie文件之内的,客户端单方面销毁Cookie文件并不会销毁Session本体

Cookie只能存储字符串,Session可以存储任意对象

Cookie的创建是客户端收到的响应报文中包含setCookie响应头就会创建,Session的创建是服务器通过getSession来获取新的Session,再通过响应报文中的Cookie发送给客户端

Cookie的销毁是默认随着浏览器关闭而销毁,Cookie可通过setMaxAge方法延长销毁时间,Session的销毁默认是无操作30分钟后销毁,也可以通过invalidate方法或者关闭服务器来销毁

Cookie储存在磁盘,Session储存在内存(可持久化到磁盘)

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值