Ken的杂谈
  • Ken的杂谈 (current)
  • 关于
  • 杂谈
    Java Spring Spring Boot Spring Cloud MyBatis C# .NET Core .NET ASP.NET Core ASP.NET ClassLibrary Mono 数据库 MySQL SQL Server 网络 缓存 Web Linux CentOS Ubuntu macOS Windows openEuler Nginx ServiceStack JS/JQ 正则 工具 IDE Grafana Exceptions CI/CD Solution 微服务 Arch Docker 杂谈
  • 系列
    Java 快速入门系列教程 Spring Boot 入门教程 Spring Boot 2.x 入门教程 Spring Cloud 入门教程 .NET Core 快速入门教程 ASP.NET Core 2.1 入门教程 CentOS 7 快速上手教程 Ubuntu快速上手入门教程 Hyper-V基础教程 Docker入门教程
  • GitHub

Cookie的特点和使用经验/建议总结

Web @ 2017-10-31 21:08:44 · 阅读:(12634)

一、前言

什么是Cookie?

Cookie就是以Key,Value的形式存储在浏览器端的数据。
https://baike.baidu.com/item/cookie/1119

二、工作原理与应用场景

1、工作原理

在Request的时候,浏览器将Cookie信息放在HTTP-Request Headers中。
在Response的时候,浏览器保存HTTP-Response Headers信息中的Cookie信息。

Cookie的核心信息包含三个部分:Name、Value、过期时间。
Cookie的保存是覆盖式的,所以Cookie的添加、更新、删除对于浏览器来说都是执行设置(set)的动作。

3、应用场景

  • 记住登录名

可以在用户登录成功后记录登录名,用户下次登录就可以不用输入了

  • 购物车信息

用户未登录情况下可以将购物车信息保存在购物车中,等到用户要付款时再引导用户去登录,也可以在用户登录后,将cookie中的信息上传到服务器持久化存储

  • 广告追踪

常见于搜索引擎或者广告联盟。比如 ken.io 引入了百度站长统计,用户访问时,百度就会为用户生成一个唯一标识存储在Cookie中。当用户下次访问的时候,百度就知道你是不是 ken.io 的老用户。另外如果你访问的很多网站都引入百度统计或者百度广告联盟的,那么百度就会根据你的浏览行为进行分型,最终形成你的用户画像,年龄、性别、爱好甚至年龄范围等等

所以,如果你讨厌广告追踪,你可以安装广告屏蔽插件,或者养成关闭浏览器就清除Cookie的习惯。(~ ̄▽ ̄)~

三、特点

1、存储特点

  • (1)存储大小受限,跟浏览器版本有关
  • (2)存储条数受限,跟浏览器版本有关
  • (3)字符编码为Unicode,不支持直接存储中文
  • (4)存储内容可以被轻松查看,不建议存储敏感信息
  • (5)可靠性差,可能随时都会因为各种原因被删除
  • (6)存储属性除了Name、Value、过期时间,还有Domian、Path,当前域可以操作当前域子域、父域名的Cookie,当前Path,可以操作当前Path以及当前Path子、父Path下的Cookie。

domian:www.ken.io 是ken.io的子域,是test.www.ken.io的父域,同时也是blog.ken.io的同级域名。www.ken.io下的应用可以访问ken.io以及*.www.ken.io下的Cookie,但是不能访问blog.ken.io下的Cookie

path:例如页面:http://ken.io/home/about 路径是/home/about,这个路径下可以访问到根路径/以及/home/*路径下的Cookie,当时不能访问到/category下的Cookie

2、传输特点

  • (1)每次Request客户端符合domian以及path要求的Cookie都会通过Request Headers传输到服务器端
  • (2)传输的Cookie大小会受到浏览器以及Web服务器的限制

3、安全特点

  • Cookie中的信息很容易被查看,建议加密后存储
  • Cookie容易被XSS攻击利用,可以设置HttpOnly=true,不允许客户端读写

版本过于老旧的浏览器不支持HttpOnly=true的属性
https://www.owasp.org/index.php/HttpOnly

四、使用经验/建议

  • 不要保存未经加密敏感信息(安全性)
  • 如果不需要在客户端访问,设置HttpOnly=true(安全性)
  • 设置合理的过期时间(传输效率)
  • 不要存储过大的内容(传输效率)
  • 不要存储过多的条目(传输效率)
  • 设置合理的domian、path,减少不必要的Cookie传输(传输效率)
  • 不要存储非Unicode字符(可用性)
  • 不要存储不可恢复的信息(可靠性)

Ken的杂谈

本文由 ken.io 创作,采用CC BY 3.0 CN协议 进行许可。 可自由转载、引用、甚至修改,但需署名作者且注明出处。

Web

随笔目录


    © Copyright 2012-2025 Ken的杂谈

    豫ICP备10025012号

    ASP.NET Core(6.0) on Linux