- Cookie
服务端给客户端的数据,存储于客户端(浏览器)。由于是保存在客户端上的,所以存在安全问题,并且cookie是由个数和大小限制的(4KB),所以一般cookie用来存储一些比较小且安全性要求不高的数据,而且一般数据都会进行加密。
1、创建cookie
Cookie c = new Cookie(String name,String value);
name为cookie的名称,value为cookie的值
2、添加cookie到response中
response.addCookie(c);
需要将生成的cookie添加到HttpServletResponse的对象中才能起作用
- 获取cookie
Cookie[] arr = request.getCookies(); 当不存在cookie的时候此方法会返回null值
arr[i].getName(); 获取cookie的名称
arr[i].getValue(); 获取cookie的值
- 设置cookie的生存时间
cookie.setMaxAge(int expiry);
expiry的取值有中情况
当 expiry> 0,浏览器会将cookie保存在硬盘上,超过指定的时间(单位是秒),浏览器会销毁该cookie。
当 seconds < 0,保存在内存里面
当 seconds = 0,浏览器会立即删除该cookie。
注意:对cookie做出的设置做出修改后记得要加上这句代码,否则没有任何效果。
response.addCookie(Cookie arg0);
- cookie的编码问题
Cookie保存中文会乱码,所有建议通过使用编码格式(例如:UTF-8)进行编写后然后在存储到cookie中,使用该cookie 时在获取出来然后进行解码操作。
String URLEncoder.encode(String str,String charset)
String URLDecoder.decode(String str,String charset)
- Session
在学习jsp的时候我们知道了session是jsp的内置对象,其作用域是在整个会话期间。
我们在之前Cookie的例子会发现cookie中有JSESSIONID这个字段,实际上首次请求网页时在请求头里是没有这个字段的,因为我们并没有创建session,当我们调用request.getSession()时,此时会创建一个session,并且将sessionId保存到cookie中,然后回写给response,所以我们发现首次创建session时的响应头中有JSESSIONID这个字段,后面的request默认都会带上JSESSIONID这个字段,而response中则不会再有该字段了。而服务器就能够根据JSESSIONID这个字段值查找对应的session。
- session对象的创建
方式一:HttpSession s = request.getSession(boolean flag)
flag==true: 先查看请求当中是否有sessionId,如果没有,则创建session对象。如果有sessionId,则依据sessionId去查找对应的session对象,找到了,则返回;如果找不到,则创建一个新的session对象。
flag==false:先查看请求当中是否有sessionId,如果没有,会返回null。如果有sessionId,则依据sessionId去查找对应的session对象,找到了,则返回;如果找不到,返回null。
方式二:HttpSession s = request.getSession(); 和flag==true一致
- Session的常用方法
HttpSession session = request.getSession();//获取session,没有则创建
session.getId();//获取
sessionId session.getAttribute("key");//获取存储的某个值
session.setAttribute("key","value");//存储数据,value是object类型
session.getCreationTime();//获取session创建的时间
session.removeAttribute("key");//移除某个数据
session.invalidate();//重置session,使session失效
session.setMaxInactiveInterval(1*60*60);//设置会话的超时时间(单位:秒),默认30分钟 session.getLastAccessedTime();//最后一次修改session的时间