HTTP是一种无状态协议,每次客户端访问web页面时,客户端打开一个单独的浏览器窗口连接到web服务器,由于服务器不会自动保存之前客户端请求的相关信息,所有无法识别一个HTTP请求是否为第一次访问。这就引进了web客户端和服务器端之间的会话,这就是会话管理。
Cookie是HTTP协议里面的,Session是JavaEE的标准
Cookies是存储在客户端计算机上的文本文件,其中保留了各种跟踪信息。
简单说,Cookie是个特殊的数据,浏览器得到它之后会存储下来,下次请求时会自动传送过去。
浏览器首次访问服务器,会接受到服务器创建好的cookie,下次访问的时候会携带者cookie访问
cookie是用key-value的形式存储的
创建Cookie对象,调用Cookie的构造方法,给出Cookie的名称和Cookie的值,二者都是字符串
Cookie c = new Cookie(“userName”,”a1234”)
设置最大时效、访问路劲
– 如果要告诉浏览器将Cookie存储到磁盘上,而非仅保存在内存中
c.setMaxAge(24 * 60 * 60); // 设置 Cookie 的有效期为一天(以秒为单位)
c.setPath("/"); // 设置 Cookie 的路径,使其在整个应用程序中可用
将Cookie放入到HTTP响应中,如没有这一步,将不会有任何Cookie被发送到浏览器
response.addCookie(c)
调用request.getCookies
得到Cookie对象组成的数组
循环数组,调用每个对象的getName找到想要的cookie
根据应用程序调用getValue方法使用这个Cookie
Cookie[] cookies = request.getCookies();
if(cookies != null)
{
for(Cookie cookie : cookies)
{
if("userId".equals(cookie.getName()))
{
//doSomethingWith(cookie.getValue());
}
}
}
• 优点
– 可配置到期规则,数据可持久保存
– 不需要服务器资源,数据保存在客户端,服务器压力小
– 简单性,基于文本的Key-Value对
• 缺点
– 大小受到限制(总数300;20/站点;4KB/Cookie)
– 用户可禁用客户端接收Cookie的功能
– 潜在的安全风险,密码什么的存到浏览器上不安全
Session的数据信息存放在服务器上,Session依赖于Cookie,但是他把信息存储到服务器上,会更安全,浏览器上存的Cookie是SessionID。
Session是JavaEE的标准
服务器设置Session,浏览器访问之后,用Cookie存储上SessionID,下次访问带上SessionID
Session也是 key-value类型
• 通常分三个步骤
– 获取一个与请求相关联的会话
• HttpSession session = request.getSession();
– 从Session中设置一个属性
• session.setAttribute(“userName”,userName);
– 从Session中获取一个属性
• session.getAttribute(“userName”);
– 根据需要关闭会话
• session.invalidate();
• 通常客户端不提供结束会话的通知,而是Servlet容器在用户处于一段非
活动期后就会自动的使会话失效——这个时间段称为会话的超时期
浏览器存的是 Session的ID,下次浏览器访问的时候会传过来这个SessionID
优点:数据安全
缺点:服务器会有压力