会话技术分为Cookie和Session:
Cookie:数据存储在浏览器客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清除cookie
Session:将数据存储到服务器端,安全性相对好,增加服务器的压力
域对象:
域对象就是存储数据的区域(其实就是服务器中一块内存区域)
四个域对象:
Request、ServletContext、Session、PageContext
所有的域对象都有这三个方法:
- request.setAttribute("list", list);
- request.getAttribute("list");
- request.removeAttribute("list");
范围:ServletContext>Session>Request>PageContext
一、Cookie
数据放在浏览器端的技术叫Cookie技术
各类电商网站,通常在用户没有登录时候,购物车信息是存放在Cookie中,如果用户登录了,会把Cookie中购物车信息 同步到服务器的数据库中,是不会放到ServletContext、Session中,因为像ServletContext和Session都是服务器中的一块内存区域是非常宝贵,重启服务器所有的内存区域都会销毁,数据也就没有。
1.1服务器怎么将Cookie设置到浏览器客户端
创建Cookie
Cookie cookie = new Cookie(cookieName, cookieValue);
resp.addCookie(cookie);
Cookie会以响应头的形式发送给浏览器客户端。
Cookie中不能存中文。
1.2服务器怎么接受客户端携带的Cookie
1)通过request获得所有的Cookie:
Cookie[] cookies = request.getCookies();
2)遍历Cookie数组,通过Cookie的名称获得我们想要的Cookie
1.3Cookie在浏览器中保存多长时间?
- 默认情况下,当浏览器关闭后,Cookie数据被销毁
- 持久化存储:
cookie.setMaxAge(10 * 60);//保存10分钟
二.Session
Session服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession
但客户端需要每次携带一个标识的ID:JSESSIONID去服务器寻找自己的内存空间。
所以说Session技术是基于Cookie技术的,Session需要借助于Cookie存储客户的唯一标识JSESSIONID。
2.1获得Session对象
两中getSession方法:
request.getSession(false)
得到session对象,原来有Session就直接返回,没有返回null
request.getSession(true)
创建或得到session对象,原来有Session就直接返回,没有Session自动创建新的session对象。
默认就是true
2.2怎样向session中存取数据
- session.setAttribute(String name,Object obj);
- session.getAttribute(String name);
- session.removeAttribute(String name);
2.3Session对象的生命周期
3、Session对象的生命周期
创建:第一次执行request.getSession()时创建
销毁:
- 服务器关闭时
- session过期/失效(默认30分钟)
2.4Session与Cookie的区别
- Session存储数据在服务器端,Cookie在客户端
- Session没有数据大小限制,Cookie有
- Session数据安全,Cookie相对于不安全