会话技术
1.会话技术概述
(1)什么是会话?
浏览器访问服务器开始, 到最后访问服务器结束,关闭浏览器位置, 这期间产生的多次请求和响应加在一起就称之为是一次会话.
(2)如何保存会话中产生的数据
可以尝试使用之前学习的过域对象来保存会话中的数据
但是request域太小了
ServletContext域太大了
利用Cookie和Session可以保存会话中产生的数据
2.Cookie
Set-Cookie响应头和Cookie请求头
Cookie的API
(1)创建Cookie
Cookie cookie = new Cookie(name, value);
(2)将Cookie添加到响应中(发送给浏览器)
response.addCookie(cookie);
(3)获取请求中带过来的所有Cookie(对象组成的数据)
Cookie[] cs = request.getCookies();
(4)删除Cookie
再发一个同名/同path的Cookie, 并设置Cookie的生存时间为0, 发送给浏览器即可!
(5)Cookie的常用方法
getName()
getValue()
setValue()
!!setMaxAge()
!!setPath()
3.Session
(1)Session的原理
在服务器中为每一个浏览器创建一个Session域对象, 专门用来保存当前浏览器和服务器之间产生的会话数据.
(2)Session是一个域对象
setAttribute()
getAttribute()
removeAttribute()
生命周期
创建: 第一次调用request.getSession方法
销毁:(1)超时销毁 (2)自杀 (3)意外身亡
作用范围:整个会话范围内
主要功能:在整个会话范围内共享数据
(3)如何在浏览器关闭之前的session
由于session创建之后, 服务器会将Session的id作为Cookie发送给浏览器保存, 方便浏览器下次来访问服务器时, 可以通过Cookie将Session的id带给服务器, 这样就可以找到之前的session. 如果浏览器中途关闭, Cookie会丢失(服务器默认发送的Cookie是会话级别的Cookie), session的id也会丢失, 所以再次访问服务器时, 找不到之前的session.
解决方案:
在创建session后, 服务器会向浏览器发送Cookie来保存session的id, 我们也可以向浏览器发送Cookie, 也保存session的id, 区别是我们发送的Cookie, 可以设置最大生存时间, 这个Cookie将会保存在硬盘上, 即使浏览器关闭, Cookie也不会丢失, 下次来访问服务器仍然可以带着session的id, 也可以获取之前的之前.