一、概念理解

1.什么是Cookie?

Cookie 是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie 是由 Web服务器保存在用户浏览器(客户端)上的小文本文件(内容通常经过加密),它可以包含有关用户的信息。无论何时用户链接到服务器,Web站点都可以访问Cookie 信息,可以看作是浏览器缓存。

2.创建流程图

Cookie的分发是通过扩展HTTP协议来实现的,服务器端通过在HTTP的响应由中加上一行特殊的指示以提示浏览器按照指示生成相应的Cookie。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1).创建Cookie

ResponseCookie cookie = WebUtils.createResponseCookie(name, value, httpOnly, expiry, path ,domain);

2).通知浏览器保存修改Cookie

response.addHeader("Set-Cookie", cookie.toString());

3.Cookie属性描述

Cookie的内容主要包括name(名字)、value(值)、maxAge(失效时间)、path(路径),domain(域)和secure

属性 描述
Name cookie的名字,一旦创建,名称不可更改
Value cookie的值,如果值为Unicode字符,需要为字符编码。如果为二进制数据,则需要使用BASE64编码
Domain cookie生效的域,可以访问该Cookie的域名。第一个字符必须为".",如果设置为".yonisv.com",则所有以"yonisv.com结尾的域名都可以访问该cookie",如果不设置,则为所有域名
Path 该cookie的使用路径。如果设置为"/sessionWeb/",则只有ContextPath为“/sessionWeb/”的程序可以访问该cookie。如果设置为“/”,则本域名下ContextPath都可以访问该cookie
Expires/Max-Age cookie失效时间,单位秒。如果为正数,则该cookie在maxAge后失效。如果为负数,该cookie为临时cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该cookie。如果为0,表示删除该cookie。默认为-1
Size 此cookie的大小
HttpOnly 是否允许JS获取(false表示可以允许JS获取)
Secure 该cookie是否仅被使用安全协议传输

二、应用场景

Cookie最大的特点是自动随该域下的请求带在request header的Cookie字段里,而无需额外的JS操作,在做通用的登录认证系统的时候有着天然的优势。
Cookie有httpOnly属性,可以防止XSS攻击,安全性比其他存储更有保障。
服务端在控制页面跳转的时候可以不通过JS方便的进行少量值的传递,控制页面的展示。
静态资源CDN之所以放在非主域名下,很大一部分原因在于可以无需携带相关Cookie,减少流量损耗。

三、扩展示例

1.服务端把cookie写到客户端

把常用的属性写入指定域下的请求request header的Cookie字段里,而无需额外的JS操作。

    /***  本地测试:http://local.yonisv.com:8080/isv/rest/cookies/test*/@RequestMapping("/cookies/test")public void testSetCookies(HttpServletRequest request, HttpServletResponse response){String userIdCookieKey = "zs_userId";// keyString userIdCookieValue = "11111111";//对应的value值Boolean httpOnly = false; //设置成false前端才可以获取值long expiry = -1; //-1长期有效,0无效(相当于删除)String cookieDomain = "yonisv.com";String path = "/";ResponseCookie cookie1= WebUtils.createResponseCookie(userIdCookieKey, userIdCookieValue, httpOnly, expiry, path,cookieDomain);response.addHeader(HttpHeaders.SET_COOKIE, cookie1.toString());ResponseCookie cookie2 = WebUtils.createResponseCookie("zs_name", "张三", httpOnly, expiry, path,cookieDomain);response.addHeader(HttpHeaders.SET_COOKIE, cookie2.toString());}

最好把上面的方法放到
com.yonyou.ucf.mdf.app.controller.isv.AuthController#authByUnifyCode 方法里,因为前端脚手架会请求该请求

测试访问:

因为我们前端脚手架封装了获取Cookie属性的方法,可以直接获取:

cb.utils.getCookie('zs_userId');

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p2RbLa89-1640744000458)(images/cookie5.png)]

2.服务端获取客户端cookie

可以通过拦截器,获取cookie里信息,初始化到上下文中

 /***  本地测试:http://local.yonisv.com:8080/isv/rest/getCookies/test*/@RequestMapping("/getCookies/test")public void getCookies(HttpServletRequest request, HttpServletResponse response){String yht_access_token  = "yht_access_token";String yht_userId  = "zs_userId";// 根据自己的业务coding。比如放到拦截器中,可以把从浏览器中获取其他域的Cookie放到上下文中或其他业务操作Cookie[] allCookies = request.getCookies();if(allCookies != null){//从中取出指定的cookie值Cookie isvUserIdCookie = Arrays.stream(allCookies).filter(cookie -> yht_userId.equals(cookie.getName())).findAny().orElse(null);String userId = isvUserIdCookie.getValue();System.err.println("userId:"+userId);Cookie isvTokenCookie = Arrays.stream(allCookies).filter(cookie -> yht_access_token.equals(cookie.getName())).findAny().orElse(null);String token = isvTokenCookie.getValue();System.err.println("token:"+token);}}

Cookie原理及应用场景相关推荐

  1. Django基础(33): 中间件(middleware)的工作原理和应用场景举例

    在初级Django开发项目中,你大概率用不到中间件(Middleware).但随着项目需求越来越复杂,你就需要开始编写自己的中间件了.当你了解到Django中间件(middleware)的工作原理和作 ...

  2. Django 中间件(middleware)的工作原理和应用场景举例

    在初级Django开发项目中,你大概率用不到中间件(Middleware).但随着项目需求越来越复杂,你就需要开始编写自己的中间件了.当你了解到Django中间件(middleware)的工作原理和作 ...

  3. 算法:详解布隆过滤器的原理、使用场景和注意事项@知乎.Young Chen

    算法:详解布隆过滤器的原理.使用场景和注意事项@知乎.Young Chen 什么是布隆过滤器 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data struc ...

  4. oracle分库分表原理_02. MyCat 的原理,应用场景,分库分表的思想

    # MyCAT 作用是能够代替昂贵的oracle的MySQL集群中间件. 1) 一个彻底开源的,面向企业应用开发的"大数据库集群" 2) 支持事务.ACID.可以替代Mysql的加 ...

  5. 同一事务多次加for_谈谈事务隔离级别,以及悲观锁和乐观锁的原理和应用场景...

    前言 在日常开发中,数据库我想大家一点都不陌生是吧,我想不管你写啥,数据库就算没用过你也听说过吧.做好数据方面的操作,不仅仅需要对Java相关框架的掌握,还需要对数据库自身体系结构的理解. 本文是补充 ...

  6. CF、FM、DSSM、DeepFM等这些推荐模型的原理以及使用场景是什么?

    由于近些年深度学习技术的飞速发展,大力加速推动了AI在互联网以及传统各个行业的商业化落地,尤其是推荐系统.计算广告等领域.由于推荐系统与提升用户量以及商业化变现有着密不可分的联系,各大公司都放出了众多 ...

  7. WebSocket原理及使用场景(转载)

    由轮询到WebSocket 1 轮询 客户端和服务器之间会一直进行连接,每隔一段时间就询问一次.客户端会轮询,有没有新消息.这种方式连接数会很多,一个接受,一个发送.而且每次发送请求都会有Http的H ...

  8. 闭关修炼(二十二)session和cookie原理

    文章目录 简述 cookie 如何创建cookie 如何获取cookie cookie原理 session 如何创建session 如何获取session session原理 边角料 简述 cooki ...

  9. 微信团队分享:视频图像的超分辨率技术原理和应用场景

    为什么80%的码农都做不了架构师?>>>    本文来自微信多媒体团队高欣玮的技术分享. 1.前言 图像和视频通常包含着大量的视觉信息,且视觉信息本身具有直观高效的描述能力,所以随着 ...

最新文章

  1. SAP PP 启用了HU管理下的工单入库
  2. QN8027输出调频分裂的频谱
  3. linux几种快速清空文件内容的方法
  4. 了解Sql Server的执行计划
  5. iOS拓展---碰到奇葩需求
  6. centos下crontab的使用
  7. Invisor for Mac(媒体文件检查工具)v3.14免激活版
  8. linux制作chroot环境,Linux构造chroot环境
  9. JFreeChart的简单应用及乱码解决
  10. 分享一个列表查询查看多选基础资料的解决方案
  11. 面向对象6:构造器、JavaBean、UML图、this的使用
  12. android gif 卡顿,Android SketchImageView 加载Gif图片,解决界面不流畅卡顿问题
  13. 《学习日记之Python》——GIF分解成图片
  14. 恢复svn服务器误删的文件,SVN删除文件及其恢复问题详解
  15. Java 生成条形码和二维码
  16. 企业python面试题
  17. 12306 抢票软件已被限制
  18. 判断API接口是否支持跨域
  19. Python爬虫爬取中国大学慕课MOOC课程的课程评价信息(讨论信息),采用selenium动态爬取方法
  20. 显示测试漏光软件,屏幕漏光测试怎么做(液晶显示器屏幕漏光的检测方法)

热门文章

  1. 计算机教育及课程总结报告,信息技术教学工作总结范文
  2. 唐诗三百首加密软件如何使用_使用RT809H编程器跳过高安加密制作液晶电视量产软件的方法...
  3. Python之采集速卖通商品数据
  4. Java连载81-枚举类型,生成五个不重复的随机数,集合简介
  5. excel职称计算机,有关职称计算机excel技巧
  6. 读《文明之光》第三册 吴军
  7. socket编程之listen()
  8. Http Server的工作原理
  9. NLP之基于Transformer的句子翻译
  10. 三维图形网络的球形消息传递