一、Cookie
Cookie:数据存储在浏览器客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清除
//创建Cookie
Cookie cookie = new Cookie(cookieName, cookieValue);
Cookie会以响应头的形式发送给浏览器客户端,但是其中不能包含中文
resp.addCookie(cookie);
Cookie信息是以请求头的方式发送到服务器端的
//通过request获得所有的Cookie
Cookie[] cookies = request.getCookies();
//遍历Cookie数组,通过Cookie的名称获得我们想要的Cookie
protected void service(HttpServletRequest req, HttpServletResponse resp) {
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
System.out.println("name:" + cookie.getName() + ", value: " + cookie.getValue());
}
}
Cookie保存时间
1、默认情况下当浏览器关闭后,Cookie数据被销毁
2、进行持久化存储
cookie.setMaxAge(10 * 60);//保存10分钟
设置Cookie信息在浏览器的磁盘文件中存储的时间是10分钟,过期浏览器自动删除该Cookie信息,如果先要删除客户端已经存储的Cookie信息,就是将持久化时间设置为0
二、Session
Session:将数据存储到服务器端,安全性相对好,但是增加服务器的压力
1、获得Session对象
①、request.getSession(false) :得到session对象,原来有Session就直接返回,没有返回null
②、request.getSession(true) :创建或得到session对象,原来有Session就直接返回,没有Session自动创建新的session对象
2、向session中存取数据
①、session.setAttribute(String name,Object obj);
②、session.getAttribute(String name);
③、session.removeAttribute(String name);
注:
1、当在同一个浏览器中同时打开多个标签,发送同一个请求或不同的请求,仍是同一个session;
2、当使用不同的浏览器时,发送请求,即使发送相同的请求,是不同的session;
3、当把当前某个浏览器的窗口全关闭,再打开,发起相同的请求时,是不同的session;
三、Session与Cookie的区别
1、Session存储数据在服务器端,Cookie在客户端
2、Session没有数据大小限制,Cookie有
3、Session数据安全,Cookie相对于不安全
四、域对象
域对象简单来说就是存储数据的区域
四个域对象:Request、ServletContext、Session、PageContext
域对象的方法:
1、request.setAttribute("list", list);
2、request.getAttribute("list");
3、request.removeAttribute("list");
Request、Session、ServletContext这三个域对象的区别:
1、request.setAttribute("list", list); requst的范围只在转发中有效
2、session.setAttribute("list", list); session的范围是当前这个用户的所有操作都有效
3、servletContext.setAttribute("list", list);servletContext的范围整个项目都有效
域对象范围:ServletContext>Session>Request>PageContext
使用原则:小的范围能完成功能就放到小的里面