内容介绍
案例一:记录用户的上次访问时间
案例二:在登录案例上添加一次性验证码
案例一:记录用户的上次访问时间
需求:
在用户登录网站上的时候,显示该用户上次的访问时间
技术分析:会话技术
1 什么是会话技术? 页面之间的数据交互
会话: 当打开浏览器的时候,意味会话开始了
在这过程中,我们可以有N个请求
当关闭浏览器的时候,意味会话结束了
打电话:
当电话接通,意味着会话开始
在这过程中,可以有N多交流
当电话挂断,意味着会话结束
2 会话技术的作用?
作用:就是存错多个请求过程中产生的数据
3 会话技术的分类
客户端(浏览器)的会话技术:cookie 把数据存储在浏览器端
服务器(tomcat)的会话技术:session 把数据存储在服务器端
客户端的会话技术:cookie
1 什么是cookie? cookie有什么作用?
cookie: 服务器给浏览器的小纸条
作用:记录传递数据的
2 如何使用cookie?
1 服务器如何给客户端写小纸条(cookie)
new Cookie("数据");
2 服务器如果把小纸条(cookie)传递给客户端
1://写入响应头 已经过时的方法
response.setHeader("Set-Cookie", "cd1hehe=zhangsan");
Set-Cookie:cd1hehe=zhangsan
2://底层自动帮你写Set-Cookie的响应头
response.addCookie(cookie);
浏览器: 接收cookie---存储cookie---传递cookie (浏览器保存的cookie存在key值覆盖)
服务器: 创建cookie---传递cookie---接收处理cookie
3 cookie技术的深入
1 如何将请求头中的cookie信息在服务器中取到?
request.getHeader("Cookie"); // 多个cookie还需要切割
request.getCookies(); //自动从请求头中获取cookie信息,并且切割并封装成多个cookie对象
4 cookie的常用API操作
常用方法:
getName(); 返回值String,返回的是cookie的key
getValue(); 返回值String,返回的是cookie的value
关闭情况
案例一步骤分析:
1 需要2个servlet(lastTimeServlet和showTimeServlet)
2 lastTimeServlet:创建时间
1 创建小纸条(上面的数据是系统的当前时间)
2 把小纸条响应给浏览器
3 showTimeServlet:显示用户上一次访问时间
1 获取小纸条
2 拿出小纸条的数据响应给浏览器,让浏览器显示访问时间
总结:
cookie的生命周期
默认情况下:
会话级别cookie,保存在浏览器的缓存中。
会话开启 -----------(cookie存活)----------会话结束----cookie死亡
特殊情况:
持久化cookie,保存在浏览器对应的硬盘上。
setMaxAge(); 设置最大生存时间(秒)
-1 会话级别的cookie。默认
>0 会把cookie持久化保存硬盘上
如果cookie过期了,浏览器就不会传递这个cookie了
0 立即过期 关闭或移除cookie
小知识:
1 cookie保存是有限制的。
大小限制:value 最多保存4kb内容。不能向cookie中存储大数据
数量限制:一个网站一个项目最多向一个浏览器保存30个cookie。
2 cookie不仅仅是javaee技术,asp,php,android
因为cookie是http协议制定
3 cookie不能直接存储中文。
服务器端的会话技术:session
案例二:在登录案例上添加一次性验证码
需求:
当我们在登录的时候,需要用户填写验证码
若验证码没写或者验证码写错了,都不允许登录
技术分析:Session
1 Session是什么?作用?
session是保存在服务器端的会话技术
作用:也是为了保存会话中产生的数据
注意:Session是一个域对象,作用范围:针对一次会话有效
2、session怎么用?
域对象使用步骤:
①获取域对象
HttpSession session = request.getSession();
②使用域对象
session.xxxattrbute("name","张三")
3 案例二的实现
4 session的深入
1 如何保证在一次会话中,使用的都是一个session对象。
通过JSESSIONID来保证是同一个session对象
2 为什么浏览器关闭了,session对象就换了呢?
浏览器一关闭cookie销毁,里面的jsessionid丢失了,就无法对应之前的session对象。
服务器发现你没有jsessionid,就判断你是第一次来,就会给你再创建一个新的session对象。
5 getSession()实现步骤。
调用getSession方法时,首先判断cookie中是否有jsessionid。
如果不存在jsessionid,那么直接创建一个新的session对象返回给你,
并且向响应头中写一个新的jsessionid存放cookie给浏览器。【相当于第一次来银行创建账户】
如果存在jsessionid,那么还要尝试从服务器内存中去获取session对象。
如果获取到session对象,直接返回使用。【相当于第二次来银行,用银行卡号操作账户】
(浏览器关闭)判断cookie中是否有jsessionid,如果没有,那么直接创建一个新的session对象返回给你,
并且向响应头中写一个新的jsessionid存放cookie给浏览器。【银行卡丢了,创建一个新账户,给一张新卡】
6、session对象的常用API
常用方法:
String getId()
返回session的jsessionid
invalidate()
主动销毁session对象。
一般是不用。
域对象(掌握):
void setAttribite(String name,Object value)
String getAttribute()
void removeAttribute(String name)
7、session生命周期(面试)
创建:第一次调用request.getSession();
销毁:
1、主动销毁 invalidate();
2、服务器非正常关闭 [断电、强制关机重启、Console--->Terminate]
【服务器正常关闭,之前的数据还存在的。 stop】
3、session 30分钟自动过期,过期后销毁(离开电脑30分钟不点击)
tomcat配置文件中:
tomcat/conf/web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>