-
存储位置:客户端浏览器
-
设置时机:在浏览器第一次发起请求来请求服务器的时候,在服务器端来设置一个cookie。
-
存储信息:存储用户相关的一些数据信息。如在 cookie 当中来存储当前登录用户的用户名,用户的ID。
-
执行流程:服务器端在给客户端在响应数据的时候,会自动的将 cookie 响应给浏览器,浏览器接收到响应回来 的 cookie 之后,会自动的将 cookie 的值存储在浏览器本地。接下来在后续的每一次请求当中, 都会将浏览器本地所存储的 cookie 自动地携带到服务端
接下来在服务端我们就可以获取到 cookie 的值。我们可以去判断一下这个 cookie 的值是否存 在,如果不存在这个cookie,就说明客户端之前是没有访问登录接口的;如果存在 cookie的值,就 说明客户端之前已经登录完成了。这样我们就可以基于 cookie 在同一次会话的不同请求之间来共享数据。
-
3个自动
- 服务器会 自动 的将 cookie 响应给浏览器。
- 浏览器接收到响应回来的数据之后,会 自动 的将 cookie 存储在浏览器本地。
- 在后续的请求当中,浏览器会 自动 的将 cookie 携带到服务器端
-
自动化进行的原因
-
cookie 它是 HTTP 协议当中所支持的技术,而各大浏览器厂商都支持了这一标准。
-
在 HTTP协议官方给提供了一个响应头和请求头:
- 响应头 Set-Cookie :设置Cookie数据的
- 请求头 Cookie:携带Cookie数据的
-
-
优缺点
- 优点:HTTP协议中支持的技术(像Set-Cookie 响应头的解析以及 Cookie 请求头数据的携带,都是浏览器自动进行的,是无需我们手动操作的)
- 缺点:
- 移动端APP(Android、IOS)中无法使用Cookie
- 不安全,用户可以自己禁用Cookie
- Cookie不能跨域
-
【跨域介绍】
-
区分跨域的维度:协议,ip,端口有任何一个维度不同,那就是跨域操作
-
[协议不同,跨域] http://192.168.150.200/login.html ---------> https://192.168.150.200/login [IP不同,跨域] http://192.168.150.200/login.html ---------> http://192.168.150.100/login [端口不同,跨域] http://192.168.150.200/login.html ---------> http://192.168.150.200:8080/login [不跨域] http://192.168.150.200/login.html ---------> http://192.168.150.200/login
-
代码测试
-
响应头 Set-Cookie :设置Cookie数据
创建Cookie对象
new Cookie("name","value");
将Cookie对象添加到HttpServletResponse对象中
HttpServletResponse对象.addCookie(cookie对象);
代码演示
//设置Cookie @GetMapping("/c1") public Result cookie1(HttpServletResponse response){ //设置Cookie/响应Cookie response.addCookie(new Cookie("login_username","itheima")); return Result.success(); }
设置的cookie,通过响应头Set-Cookie响应给浏览器,并且浏览器会将Cookie,存储在浏览器端。
-
请求头 Cookie:携带Cookie数据的
获取Cookie对象
HttpServletRequest对象.getCookies(); //返回的是Cookie[]
通过Cookie对象的name和value属性获取
Cookie对象.getName(); //返回String字符串 Cookie对象.getValue(); //返回String字符串
代码演示
//获取Cookie @GetMapping("/c2") public Result cookie2(HttpServletRequest request){ Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { if(cookie.getName().equals("login_username")){ ///输出name为login_username的cookie System.out.println("login_username: "+cookie.getValue()); } } return Result.success(); }
访问c2接口 http://localhost:8080/c2,此时浏览器会自动的将Cookie携带到服务端,是通过请求头Cookie,携带的
参考文献:黑马javaWeb视频