前言:本篇学习笔记 来自B站动力节点官方号的 reyco老师的Servlet的视频中的笔记和结论
一、 Cookie简介
Cookie 是由 网景公司前雇员在 1993年发明的一种进行网络会话状态跟踪的技术。
会话是由一组请求响应组成,是围绕一件相关的事情所进行的请求与相应。所以这些请求与响应之间是一定有数据传递的,即需要进行会话跟踪的。然而 HTTP 协议是一种无状态协议,在不同的请求间 是无法进行数据传递的。此时需要一种可以进行请求间数据传递的会话跟踪技术。
Cookie 是由服务器生成,保存在客户机的一种信息载体。这个载体中存放在用户访问该站点的会话状态信息。只要 cookie 没有被清除,或者 cookie 没有失效,那么存放在其中的会话状态就有效。
用户在提交第一次请求后,由服务器生成 cookie ,并将其装到 响应头中 response,以响应的形式发送给客户端,客户端在收到响应后,将 cookie 保存到客户端,当客户端再次发送同类请求后,在请求中会携带保存在客户端 的 cookie 数据,再次发送到服务端,服务端接受到相同同的状态信息(cookie)并识别,服务端即可对对话进行跟踪。
Cookie 技术并不是 javaweb 开发的专属技术,而属于 web开发的专属技术,是所有 web 开发语言均支持的技术
Cookie 是由若干键值对构成,这里的键——一般称为 name ,值称为 value。Cookie 的 键和值 均为 字符串
二、火狐浏览器下查看 Cookie
不同的浏览器,其 Cookie 的保存位置及查看方式不一样,删除某一浏览器下的 cookie ,不会影响到其他浏览器的 cookie
火狐浏览器(版本35.0.1)可以直接看到 cookie的内容,查看位置在:(选项—>隐私—>移除单个 Cookie)
三、JAVAEE中 Cookie
在 Javaee 中的 javax.servlet.http 包中存在一个类 Cookie,就是用于完成会话跟踪的 Cookie。其中只有一个带参构造器:
public Cookie(String name,String value)
而 httpServletResponse 中有一个方法,可以将 Cookie 添加到 相应头中:
public void addCookie(Cookie cookie)
注意,一个response 中可以添加多个 Cookie 键值对。
1)创建 Cookie
Cookie cookie1 = new Cookie("username","chens"); Cookie cookie2 = new Cookie("username","chens");
2)默认绑定路径
访问路径由资源名称与资源路径构成。默认情况下,Cookie 与访问路径中的资源路径绑定,只要用户发出带有绑定资源路径(等同于同类请求)的请求,则在请求头部,将自动携带 与之绑定的 Cookie 数据
3)自定义路径
通过Cookie 类中的方法 public void setPath(String path) ,设置指定路径
//注意:这里指定的路径必须加上项目名称 cookie1.setPath(request.getContextPath() + "/xxx/ooo/some"); cookie2.setPath(request.getContextPath() + "/aaa");
4)设置Cookie的保存时长,单位为秒
//注意:时长=0或<0时或未指定时,规定在会话结束是失效 Cookie1.setMaxAge(60*60)//一小时
5)将 Cookie 添加到响应头
Response.addCookie(cookie1);
Response.addCookie(cookie2);
运行结果:
访问你的servlet,并且用火狐查看cookie
值得注意的是,passward(cookie2)没有指定 cookie 保存时间默认在会话结束失效。
6)接收 Cookie
当访问到 Cookie 指定路径时,Cookie将会被包装request中,我们可以通过 request 中的 getCookie 获取到
在相同项目中另一个servlet获取到传输过来的cookie
//获取 cookie Cookie[] cookies = request.getCookies(); //遍历 cookie for(Cookie cookie:cookies) { System.out.println(cookie.getName() + cookie.getValue()); }
好了,本篇的学习结束