1.会话技术:
==Cookie==:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问。
对于Cookie的操作主要分两大类,本别是==发送Cookie==和==获取Cookie==
//发送cookie
Cookiecookie=newCookie("key","value");
response.addCookie(cookie);
//接收cookie
Cookie[] cookies=request.getCookies();
cookie.getName();
cookie.getValue();
//获取Cookie
//1. 获取Cookie数组
Cookie[] cookies=request.getCookies();
//2. 遍历数组
for (Cookiecookie : cookies) {
//3. 获取数据
Stringname=cookie.getName();
if("username".equals(name)){
Stringvalue=cookie.getValue();
System.out.println(name+":"+value);
break;
}
}
//设置Cookie存活时间
setMaxAge(intseconds)
cookie.setMaxAge(60*60*24*7); //易阅读,需程序计算
/*
参数值为:
1.正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除
2.负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
3.零:删除对应Cookie
*/
//中文URL编码
value=URLEncoder.encode(value, "UTF-8");
//URL解码
value=URLDecoder.decode(value,"UTF-8");
全部案例:
protectedvoiddoGet(HttpServletRequestrequest, HttpServletResponseresponse) throwsServletException, IOException {
//发送Cookie
Stringvalue="张三";
//对中文进行URL编码
value=URLEncoder.encode(value, "UTF-8");
System.out.println("存储数据:"+value);
//将编码后的值存入Cookie中
Cookiecookie=newCookie("username",value);
//设置存活时间 ,1周 7天
cookie.setMaxAge(60*60*24*7);
//2. 发送Cookie,response
response.addCookie(cookie);
}
protectedvoiddoGet(HttpServletRequestrequest, HttpServletResponseresponse) throwsServletException, IOException {
//获取Cookie
//1. 获取Cookie数组
Cookie[] cookies=request.getCookies();
//2. 遍历数组
for (Cookiecookie : cookies) {
//3. 获取数据
Stringname=cookie.getName();
if("username".equals(name)){
Stringvalue=cookie.getValue();//获取的是URL编码后的值 %E5%BC%A0%E4%B8%89
//URL解码
value=URLDecoder.decode(value,"UTF-8");
System.out.println(name+":"+value);//value解码后为 张三
break;
}
}
==Session==:服务端会话跟踪技术:将数据保存到服务端。
Session是存储在服务端而Cookie是存储在客户端
存储在客户端的数据容易被窃取和截获,存在很多不安全的因素
存储在服务端的数据相比于客户端来说就更安全
session数据存储在服务端,服务器重启后,session数据会被保存
浏览器被关闭启动后,重新建立的连接就已经是一个全新的会话,获取的session数据也是一个新的对象
session的数据要想共享,浏览器不能关闭,所以session数据不能长期保存数据
cookie是存储在客户端,是可以长期保存
Session是基于Cookie来实现的
Session的钝化和活化:
钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中
活化:再次启动服务器后,从文件中加载数据到Session中
默认情况下,无操作,30分钟自动销毁
<session-config>
<session-timeout>100</session-timeout>//可以修改销毁时间
</session-config>
主动销毁
session.invalidate();
//设置session
//1. 获取Session对象
HttpSessionsession=request.getSession();
//2. 存储数据
session.setAttribute("username","zs");
//获取session
//1. 获取Session对象
HttpSessionsession=request.getSession();
//2. 获取数据
Objectusername=session.getAttribute("username");
Cookie和Session的区别是什么?
Cookie和Session的应用场景分别是什么?
区别:
存储位置:Cookie 是将数据存储在客户端,Session 将数据存储在服务端
安全性:Cookie不安全,Session安全
数据大小:Cookie最大3KB,Session无大小限制
存储时间:Cookie可以通过setMaxAge()长期存储,Session默认30分钟
服务器性能:Cookie不占服务器资源,Session占用服务器资源
应用场景:
购物车:使用Cookie来存储
以登录用户的名称展示:使用Session来存储
记住我功能:使用Cookie来存储
验证码:使用session来存储
结论
Cookie是用来保证用户在未登录情况下的身份识别
Session是用来保存用户登录后的数据
jsp动态调用cookie
value="${cookie.username.value}"