Cookie
基本使用
1.创建对象,设置数据
Cookie cookie = new Cookie("key","value");
2.发送Cookie到客户端:使用response对象
response.addCookie(cookie);
3.获取客户端携带的Cookie,使用request对象
Cookie[] cookies = request.getCookies();
4.遍历数组,获取每一个Cookie对象
for (Cookie cookie : cookies) {
}
5.使用Cookie对象方法获取数据
String value = cookie.getValue();
基本使用演示
Aervlet.java发送Cookie
// 1.创建Cookie
Cookie cookie = new Cookie("username","zs");
// 2.发送cookie
response.addCookie(cookie);
Bservlet.java接收cookie
// 1.获取Cookie数组
Cookie[] cookies = request.getCookies();
// 2.遍历数组
for (Cookie cookie : cookies) {
// 3.获取数据
String name = cookie.getName();
if("username".equals(name)){
String value = cookie.getValue();
System.out.println(name + ":" + value);
break;
}
}
Cookie原理
- 响应头: set-cookie
- 请求头: cookie
AServlet
给前端发送Cookie,BServlet
从request获取Cookie- 当
AServlet
响应数据时,Tomcat服务器基于HTTP协议来响应数据 - Tomcat发现后端要返回一个Cookie对象之后,会在响应头添加 Set-Cookie:username=zs
- 当浏览器再次发送请求给
BServlet
时,浏览器会自动在请求头添加Cookie:username=zs
发送给服务器端BServlet
- Request对象会把请求中cookie对应的值封装一个Cookie对象,最终保存在一个数组中
BServlet
通过Request对象获取到cookie数组后,就可以获取到需要的数据
Cookie存活时间
默认情况,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁
setMaxAge(int seconds)
1.正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储,到期后自动删除
2.负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
3.零:删除对应Cookie
//发送Cookie
//1. 创建Cookie对象
Cookie cookie = new Cookie("username","zs");
//设置存活时间 ,1周 7天
cookie.setMaxAge(60*60*24*7); //易阅读,需程序计算
//cookie.setMaxAge(604800); //不易阅读(可以使用注解弥补),程序少进行一次计算
//2. 发送Cookie,response
response.addCookie(cookie);
Cokkie中文乱码
Cookie不能直接存储中文
1.在AServlet中对中文进行URL编码,采用URLEncoder.encode(),将编码后的值存入Cookie中
2.在BServlet中获取Cookie中的值,获取的值为URL编码后的值
3.将获取的值在进行URL解码,采用URLDecoder.decode(),就可以获取到对应的中文值
AServlet.java
中文编码
String value = "张三";
//对中文进行URL编码
value = URLEncoder.encode(value, "UTF-8");
System.out.println("存储数据:"+value);
Cookie cookie = new Cookie("username", "value");
//设置存活时间
cookie.setMaxAge(60 * 60 * 24 * 7);
//2. 发送Cookie,response
response.addCookie(cookie);
BServlet.java
解码
//获取Cookie
//1. 获取Cookie数组
Cookie[] cookies = request.getCookies();
//2. 遍历数组
for (Cookie cookie : cookies) {
//3. 获取数据
String name = cookie.getName();
if ("username".equals(name)) {
String value = cookie.getValue();//获取的是URL编码后的值
//URL解码
value = URLDecoder.decode(value, "UTF-8");
System.out.println(name + ":" + value);//value解码后为 张三
break;
}
}
Session基本使用
Session
:服务器会话跟踪技术:将数据保存到服务器端
- 获取Session对象,使用request
- session对象提供的功能
- 存储数据到session中
void setAttribute(String name,Object o)
- 根据key获取值
Object getAttribute(String name)
- 根据key删除值
Object removeAttribute(String name)
- 存储数据到session中
Session基本演示
sessionDemo1.java
//1.获取Session对象
HttpSession session = request.getSession();
//2.存储数据
session.setAttribute("username","zs");
sessionDemo2.java
//获取数据,从session中
//1. 获取Session对象
HttpSession session = request.getSession();
//2. 获取数据
Object username = session.getAttribute("username");
System.out.println(username);
}
Session原理
1.demo1在第一次获取session对象的时候,session对象会有一个唯一的标识
2.demo1在session中存入数据并处理完所有业务以后,通过Tomcat服务器响应结果给浏览器
3.Tomcat发现业务处理中使用了session对象,就会把session的唯一标识当作一个cokkie,添加Set-Cookie:JESSIONID=唯一标识 到响应头中,并响应给浏览器
4.浏览器就收到响应之后,就会把响应头中的cookie数据存储到浏览器的内存中
5.浏览器在同一会话访问demo2的时候就会把cookie中的数据按照cookie:JESSIONID=唯一标识
添加到请求头并发送给服务器
6.demo2获取到请求之后,从请求头读到唯一标识,就会到服务器内存中寻找的对应的session对象,如果找到了就直接返回该对象,没有则会新创建一个session对象
7.关闭浏览器重新打开之后,cookie对象已被销毁,服务器端获取的是一个全新的session对象
总结:Session是基于Cookie来实现的
Session钝化与活化
钝化:在服务器正常关闭以后,Tomcat会自动将session数据写入磁盘
- 钝化的数据路径为: 项目目录
\target\tomcat\work\Tomcat\localhost\项目名称 \SESSIONS.ser
活化:再次启动服务器以后,从文件加载数据到session中,加载之后.ser文件自动被删除
Session销毁
1.默认情况下,30分钟自动销毁
- 配置文件web.xml中配置
-
2.调用Session对象的invalidate()进行销毁<session-config> <session-timeout>100</session-timeout> </session-config>
session.invalidate();
会话总结
Coojie和Session都是来完成一次会话内多次请求间数据共享的
区别
- 存储位置:Cookie将数据存储在客户端 Session存储在服务端
- 安全性:Cookie不安全 Session安全
- 数据大小:Cookie最大3KB,Session无大小限制
- 存储时间:Cookie可以通过setMaxAge()长期存储,Session默认30分钟
- 服务器性能:Cookie不占服务器资源,Session占用服务器资源
应用场景:
- 购物车:使用Cookie来存储
- 以登录用户的名称展示:使用Session来存储
- 记住我功能:使用Cookie来存储
- 验证码:使用session来存储
结论
- Cookie是用来保证用户在未登录情况下的身份识别
- Session是用来保存用户登录后的数据
会话案例-登录注册
需求说明
1.完成用户登录功能,如果用户勾选“记住用户”,则下次访问登录页面自动填充用户密码
2.完成注册功能,并实现验证码功能