1.Cookie(客户端会话技术)
1.1Cookie基本使用
- CooKie :客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
- Cookie基本使用
- 发送Cookie
- 创建Cookie对象
Cookie cookie = new Cookie("username", "zzz");
- 发送Cookie到客户端;使用response对象2
response.addCookie(cookie);
- 获取Cookie
- 获取Cookie数组 (获取客户端携带的所有的Cookie,使用Request对象)
Cookie[] cookies = request.getCookies();
- 遍历数组。获取每一个Cookie对象:for(Cookie cookie:cookies)
- 使用Cookie对象方法获取数据
cookie.getName(); cookie.getValue();
- 发送Cookie
//发送Cookie
//1.创建Cookie对象
Cookie cookie = new Cookie("username", "zzz");
//2.发送Cookie.response
response.addCookie(cookie);
//获取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;
}
}
1.2Cookie原理
- Cookie的实现是基于HTTP协议的
- 响应头:set-cookie(发送的时候)
- 请求头:cookie
1.3Cookie使用细节
1.3.1Cookie存活时间
- 默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁
- setMaxAge(int seconds):设置Cookie存活时间
1.正数:将Cookie写入浏览器所在的电脑硬盘,持久化存储,到时间自动删除
2.负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
3.零:删除对应Cookie
//发送Cookie
//1.创建Cookie对象
Cookie cookie = new Cookie("username", "zzz");
//设置Cookie存活时间 1周7天(秒)
cookie.setMaxAge(60*60*24*7);
//2.发送Cookie.response
response.addCookie(cookie);
1.3.2Cookie存储中文
- Cookie默认不允许存储中文
- 如果需要存储,则需要进行转码:URL编码
//URL解析 =>value代表中文字符串
value = URLEncoder.encode(value, "UTF-8");
//解码
URLDecoder.decode(value,"UTF-8");
2.Session(服务端会话技术)
2.1 Session基本使用
-
服务端会话跟踪技术:将数据保存到服务端
-
JavaEE提供HttpSession接口,来实现一次会话的多次请求见数据共享功能
-
使用:
- 获取Session对象
//存储到Sessuin中 //1.获取Session对象 HttpSession session = request.getSession(); //2.存储诗句 session.setAttribute("username","zs");
- session对象功能:
//获取Session数据 //1.获取Session对象 HttpSession session = request.getSession(); //2.存储数据 Object username = session.getAttribute("username"); System.out.println(username);
2.2 Session原理
- Session是基于Cookie实现的
- F12开发者模式查看
2.3 Session使用细节
- Session钝化、活化:
- 服务器重启后,Session中的数据依旧存在
- 钝化:在服务器正常关闭后,Tomcat会自动将Session写入硬盘的文件中
- 活化:再次启动服务器后,从文件中加载数据到Session中
- Session销毁:
- 默认情况下,无操作,30分钟自动销毁
<session-config>--> <session-timeout>100</session-timeout>//这里设置的是100分钟 </session-config>
- 调用Session对象的invalidate()方法
3.小结
- Cookie和Session都是来完成一次会话内多次请求间的数据共享的
- 区别
会话技术 | Cookie | Session |
---|---|---|
存储位置 | 数据存储在客户端 | 数据存储在服务端 |
安全性 | 不安全 | 安全 |
数据大小限制 | 最大3KB | 无大小限制 |
存储时间 | 可长期存储 | 默认30分钟,可修改默认值 |
服务器性能 | 不占用服务器资源 | 占用服务器资源 |
选择会话技术可以根据Cookie和Session之间的区别来选择