cookie
1、代码演示
1、发送cookie
Cookie cookie = new Cookie("msg","你好");
resp.addCookie(cookie);
2、接收cookie
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
String name = cookie.getName();
String value = cookie.getValue();
System.out.println("name " + name + " ,value :" + value);
}
2、原理
1、发送cookie时,其实是在响应头中添加一个set-cookie的键值对,msg=你好,此时后台如果查询有set-cookie为key的响应头,那么就会将这个数据保存到客户端浏览器中
2、获取cookie时,会查询cookie头中的数据
3、细节
1、如何传入多个cookie
Cookie cookie = new Cookie("msg","你好");
resp.addCookie(cookie);
Cookie cookie2 = new Cookie("msg2","你好");
resp.addCookie(cookie2);
2、在浏览器储存多长时间
1、默认情况下,关闭浏览器就会删除
2、持久化存储 setMaxAge(agg);
1、正数:将cookie存储到硬文件中,到达时间后自动清除硬盘文件中,单位是秒
2、负数:关闭浏览器就会删除
3、0:删除cookie
3、能否存中文
tomcat8之前不能存储中文 ,tomcat8之后是可以存储中文
4、获取的范围有多大
1、默认情况是当前目录下
2、可以修改 setPath("/") 就可以让整个目录都可以获取到
3、可以修改cookie.setDomain(".baidu.com"); 设置二级域名 都可以获取到该cookie
4、特点
1、在浏览器上存放,不安全
2、有大小限制,4kb左右
3、用户存储少量对安全不敏感的数据,例如百度中设置等数据
session
1、代码演示
1、发送session
HttpSession session = req.getSession();
session.setAttribute("msg","aaa");
2、获取session
HttpSession session = req.getSession();
System.out.println(session.getAttribute("msg"));
2、原理
发送时会在cookie头中创建一个JSESSIONID的key,value为session的id,getSession会根据这个JSESSIONID来获取值
3、细节
1、当浏览器关闭后,服务器不关闭,session是否为同一个
默认情况下不是,由于不是同一个sessionid,所以会导致获取不到值
可以new Cookie(),传入key为JSESSIONID,value为session的id,setAge(60)就可以持久化存储
2、浏览器不关闭,服务器关闭,session是否为同一个
不是同一个,但是为了保证可以为同一个,tomcat对session进行了优化,自动的,不需要我们手动设置,但是由于idea的tomcat每次启动是将work目录先删除,所以测试不出来
session钝化:session会在tomcat正常关闭之前,将session序列化到文件上
session活化:session会在tomcat正常启动之后,将session文件读取为对象
项目启动时可以看到idea中的tomcat信息,找到这个目录,就可以找到信息
3、session什么时候被销毁
调用session.invalidate();可以销毁session
session默认失效时间是30分钟,可以在web.xml中修改
4、session是存在服务器端的
5、session是可以存储任意类型,任意大小的数据
4、session和cookie的区别
1、session存储于服务器端,cookie存储于客户端
2、session没有存储大小限制,cookie有
3、session安全,cookie不安全
4、cookie可展示一些时间等对安全不敏感的数据,session可存储验证码对安全敏感的数据