cookie&session

cookie&session
• 浏览器与服务器交互信息的获取
1-1请求头:浏览器告诉服务器请求的基本信息
cookie&session_第1张图片

1-2响应头:服务器告诉浏览器响应的基本信息
cookie&session_第2张图片
1-3响应状态码
200:响应成功
404:找不到的资源(访问路径有问题)
405:你的请求方式不被允许(不被接受)
我们自定义一个方法来接收请求
fun()我们规定这个方法就是用来接收get请求的(代替我们传统的doGet方法)

500:服务器内部编码错误(java代码),找不到的servlet类
302:重定向
304:读取浏览器缓存

1-4 浏览器对于头信息的观察
打开浏览器,在浏览器地址栏输入访问地址
在发出请求之前,点击F12
F12信息框弹出之后,我们再发出请求
cookie&session_第3张图片
cookie&session_第4张图片

第二章cookie
2-1 cookie概述,画图说明cookie执行原理
客户端的会话技术,是因为cookie对象保存在浏览器上了.
cookie&session_第5张图片
2-3 通过观察头信息,掌握cookie的使用
javax.servlet.http.Cookie
(1)创建一个cookie
new Cookie(String key,String value)
(2)写回浏览器:
response.addCookie(Cookie c)

在不设置cookie对象失效时间的基础上

案例1:
访问servlet1,由servlet1创建一个cookie对象,响应回浏览器
不重启浏览器的情况下
访问servlet2,携带着cookie对象访问

案例2:
访问servlet1,由servlet1创建一个cookie对象,响应回浏览器
重启浏览器的情况下
访问servlet2,不携带cookie对象访问

1和2以上两个案例得出结论
cookie对象在不做任何设置的情况下,是保存在浏览器的内存上.关闭了浏览器,内存中的cookie对象自动销毁.

在为cookie对象设置了失效时间的基础上
案例3
访问servlet1,由servlet1创建一个cookie对象(设置了失效时间),响应回浏览器
不重启浏览器的情况下
访问servlet2,只要没有超过cookie的失效时间,携带着cookie对象访问.如果超过了失效时间,cookie对象自动销毁,访问时就不携带cookie对象了.

案例4
访问servlet1,由servlet1创建一个cookie对象(设置了失效时间),响应回浏览器
重启浏览器的情况下
访问servlet2,只要没有超过cookie的失效时间,携带着cookie对象访问.如果超过了失效时间,cookie对象自动销毁,访问时就不携带cookie对象了.

3和4以上两个案例得出结论
为cookie对象设置了失效时间,不管是否重新启动浏览器,只要cookie对象没有超过失效时间,访问就一定携带,如果超过了失效时间,就不携带.设置了失效时间后,cookie对象是保存在了浏览器的硬盘上.

2-4 cookie的常用方法
(1)获取cookie:
Cookie[] request.getCookies()
(2)获取cookie的key(名称)
getName():
(3)获取指定cookie的值
getValue()
(4)设置访问域
setPath("/1_servlet1")
(5)设置存储时间
setMaxAge(秒)
时间大于0:cookie存放到硬盘中
不设置:cookie存放到内存中

2-5 cookie的常用方式及在浏览器中的设置
(1)结合126的十天免登陆
(2)浏览器启用/禁用cookie的方式
(3)浏览器清除cookie的方式
(4)如果是不同的浏览器发送请求,cookie如何处理
cookie不能跨浏览器
不同的浏览器,cookie对象是不共享的
第三章session
3-1 session概述画图说明session执行原理
session是服务器端会话技术
会话是保存在服务器上
cookie&session_第6张图片
3-2 session对象的创建及获取
request.getSession()
request.getSession(boolean)
request.getSession(true):若存在有效会话则返回该会话,否则新建一个会话。
request.getSession(false):若存在会话则返回该会话,否则返回NULL

3-3 session的常用方法
(1)获取JSESSIONID
getId() String
(2)判断是否是新的session对象
isNew() boolean
(3)session对象的销毁
invalidate()
(4)设置空闲失效时间
setMaxInactiveInterval(秒)
如果我们没有使用以上代码为session对象设置失效时间
那么session对象的失效时间会默认的执行tomcat为我们配置好的空闲失效时间 30分钟
在tomcat conf/web.xml
500多行
在这里插入图片描述

(5)域对象存值(专题讲解)
	setAttribute(String key,Object value)
(6)域对象取值(专题讲解)
	getAttribute(String key) Object

3-4总结session与cookie的关系与区别
在我们的实际项目开发中,普遍使用的都是session对象
session对象是保存在服务器端的,而且方便管理,安全性更高.
session对象的执行原理,返回JSESSIONID的这一步是通过cookie的技术完成的.
如果遇到特殊需求,比如126的十天免登录操作,就只能使用cookie技术来完成.

第四章 域对象的生命周期及使用
4-1 域对象的生命周期
在servlet中,域对象一共有3个
分别是
上下文域 application
会话域 session
请求域 request
以上3个域对象都是在web开发中,用来做存取值操作的,当我们在域对象中存值之后,在域对象销毁之前,都可以从域对象中将我们存的值给取出来.

常用方法:
存值: setAttribute(String key,Object value)
取值:getAttribute(String key) Object
移除值:removeAttribute(String key)

域对象的生命周期
域对象从创建到销毁的全过程
application
创建:服务器启动的时候,服务器会自动的为我们创建一个上下文对象.
销毁:服务器关闭.

session
创建:执行request.getSession(),如果当前浏览器和服务器之间没有一个有效的会话,以上代码会为我们创建出来一个session对象
销毁:
(1) 关闭服务器
(2) 执行代码session.invalidate()
(3) session.setMaxInactiveInterval(10)
超过session的空闲失效时间,session对象自动销毁.

(4) 如果上述代码没有设置
默认30分钟session对象自动销毁
conf/web.xml 5xx 30
(5) 关闭浏览器,session对象不销毁的,但是存储在浏览器上的JSESSIONID销毁了.
关闭浏览器后,此时是这样一种情况
服务器中的session对象还在
浏览器上的JSESSIONID销毁了
当浏览器访问服务器执行request.getSession的时候,由于JSESSIONID销毁,就已经失去了有效的会话,以上代码会为我们创建出来一个新的会话.老会话会随着空闲失效时间的到来自动销毁.
cookie&session_第7张图片

request
创建:当请求访问到项目,那么服务器会为我们的项目创建出来一个request对象.
销毁:当servlet将请求处理完毕,准备响应的时候,request对象自动销毁.
cookie&session_第8张图片
从图上看,我们的每一次请求和响应,都是request对象创建以及销毁全过程.
从以上生命周期分析
我们域对象的取值范围
上下文域 > session域 > request域

4-2 练习:使用域对象来设置值和取值
不切换浏览器的情况下,分析以上案例结果,request域不能够取值,其他域能够取值
cookie&session_第9张图片
4-3 域对象的实际应用
(1)如何取得request域的值
转发能够取得request域的值
cookie&session_第10张图片

(2)使用重定向是否可以取得request域的值
取不到,转发是唯一能够取得request域对象中值的方式

cookie&session_第11张图片
(3)使用重定向是否可以取得request/session域的值
request
不能,重定向是两次请求,两次响应
第一次请求创建的request对象中存的值,在第一次响应的时候,值会随着request对象的销毁而销毁.
在第二次发出请求的时候,是新建一个request对象.里面是没有值的.
session
能够取得session域的值.
重定向后,session没有手动销毁,也没有超时,我们也没有关浏览器(JSESSIONID),所以我们是维持着有效的会话.存值的session并没有销毁,作为有效的会话,我们是可以从他身上取值的.

(4)系统登录操作后,用户名应保存在哪个域
	在实际项目开发中,我们使用session域来保存用户名
	使得其他的每一个页面都能够取到我们的用户名并显示出来

(5)服务器缓存(cache),应该使用哪个域来操作
	使用上下文域来操作
	使用服务器缓存的目的是使得我们每一次在取数据的过程中,不用每一次都去连接数据库,从数据库中取数据,我们直接从缓存中读取数据是最方便最快的.
需求:现在有一张表单,表单下拉框中的数据是活的, 这组数据不经常发生变化(数据更新频率较低),我们应该使用哪种方式来对这些数据做显示的操作.
我们应该使用服务器缓存(cache)(将数据从表中取出存放到上下文域中)

以下数据从city表中而来
城市: