Cookie和Session
Cookie
基于HTTP协议实现
响应头:set-cookie
请求头:cookie
默认情况下,Cookie存储在浏览器当中,当浏览器关闭,内存释放,则Cookie被销毁
setMaxAge(int seconds):设置存活时间 (单位:秒)
1.正数:将cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除
2.负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则,Cookie被销毁
3.零:删除对应 Cookie
Cookie不能直接存储中文,如需要存储,则需要进行转码:URL编码
String v = "张三";
// URL编码
v = URLEncoder.encode(v, "utf-8");
// URL解码
value = URLDecoder.decode(value, "utf-8");
//创建cookie对象
Cookie cookie = new Cookie("username", "zhangsan");
//使用response对象,发送Cookie到客户端
response.addCookie(cookie);
//获取cookie数组
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
//获取数据
String name = cookie.getName();
String value = cookie.getValue();
System.out.println(name + ":" + value);
}
Session
数据存储到session中 和 从session中获取数据 都需要先获取session对象
//获取session对象
HttpSession session = request.getSession();
//Session对象功能:
void setAttribute(String name, Object o); //存储数据到session域中
Object getAttribute(String name); //根据key,获取值
void removeAttribute(String name); //根据key,删除该键值对
钝化: 在服务器正常关闭后, Tomcat会自动将Session数据写入硬盘的文件中(模块目录下的target/tomcat/work/一直到最后)
活化: 再次启动服务器后,从文件中加载数据到Session中(同时文件也被删除)。
Session销毁:
· 默认,无操作,三十分钟自动销毁
可以在web.xml中配置标签, 设置session失效时间
· Session对象的invalidate() 方法
相同: 都是完成一次会话内多次请求间数据共享 的
区别:
Cookie | Session | |
---|---|---|
存储位置 | 将数据存储到客户端 | 将数据存储在服务端 |
安全性 | 不安全 | 安全 |
数据大小 | 最大3KB | 无大小限制 |
存储时间 | 可以长期存储 | 默认30分钟(可以设置) |
服务器性能 | 不占用服务器资源 | 占用服务器资源 |