19 | 让我知道你是谁:HTTP的Cookie机制
19 | 让我知道你是谁:HTTP的Cookie机制
讲述:Chrono
时长10:42大小12.24M
什么是 Cookie?
- 2.0x
- 1.5x
- 1.25x
- 1.0x
- 0.75x
- 0.5x
Cookie 的工作过程
Cookie 的属性
Cookie 的应用
小结
课下作业
赞 36
提建议
精选留言(72)
- 徐海浪2019-07-101. 如果 Cookie 的 Max-Age 属性设置为 0,会有什么效果呢? 设置为0,服务器0秒就让Cookie失效,即立即失效,服务器不存Cookie。 2. Cookie 的好处已经很清楚了,你觉得它有什么缺点呢? 好处:方便了市民 缺点:方便了黑客:)
作者回复: √
共 4 条评论47 - 放开那个猴子2019-07-10广告追踪没看明白呀,能否详细讲讲
作者回复: 是这样的,网站的页面里会嵌入很多广告代码,里面就会访问广告商,在浏览器里存储广告商的cookie。 你换到其他网站,上面也有这个广告商的广告代码,因为都是一个广告商网站,自然就能够读取之前设置的cookie,也就获得了你的信息。
共 14 条评论35 - Geek_666662019-08-15既然max-age=0会立即失效,那不就等于无记忆了?那干嘛还用cookie?
作者回复: max-age=0是指不能缓存,但在会话期间是可用的,浏览器会话关闭之前可以用cookie记录用户的信息。
共 2 条评论25 - 前端西瓜哥2019-07-111. (我修改 Lua 文件测试了一下)如果 Max-Age 设置为0,浏览器中该 Cookie 失效,即便这个 Cookie 已存在于浏览器中,且尚未过期。另外 Web 应用开发中,可以通过这种方式消除掉用户的登陆状态,此外记得在服务器的 session 中移除该 cookie 和其对应的用户信息。 2. Cookie 的缺点: (1) 不安全。如果被中间人获取到 Cookie,完全将它作为用户凭证冒充用户。解决方案是使用 https 进行加密。 (2)有数量和大小限制。另外 Cookie 太大也不好,传输的数据会变大。 (3)客户端可能不会保存 Cookie。比如用 telnet 收发数据,用户禁用浏览器 Cookie 保存功能的情况。展开
作者回复: good。
24 - WL2019-07-10对于XSS和XSRF一直不是很理解希望老师帮忙解答一下: 1. XSS攻击是指第三方的JS代码读取到浏览器A网站的Cookie然后冒充我去访问A网站吗? 2.XSRF是指浏览器从A网站跳转到B网站是会带上A网站的Cookie吗?这个不是由Domain和Path已经限定了吗?
作者回复: 1,是的。 2.你理解的反了,应该是带上B网站的cookie。 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies 这个链接里举的例子也许能够帮助你理解。
共 3 条评论16 - 饭饭2019-07-10Max-age:-1 的时候会永久有效吧 ?
作者回复: rfc里有说明,如果max-age <=0,统一按0算,立即过期。
16 - 业余草2019-07-10属性“HttpOnly”、“Secure”、“SameSite”很少见,老师可以给几个配套例子,后面答疑篇,可以来个攻防实战!
作者回复: 其实并不少见,上几个大站,用开发者工具看看就能看到。
共 2 条评论11 - rongyefeng2020-05-28还有一个属性叫“Secure”,表示这个 Cookie 仅能用 HTTPS 协议加密传输,明文的 HTTP 协议会禁止发送。 但 Cookie 本身不是加密的,浏览器里还是以明文的形式存在。 这里的“ Cookie 本身”怎么理解?
作者回复: 意思是cookie在传输过程是被https加密的,不能用明文的http传输,但在本地,它还是明文,没有被加密,还是能够被任意查看。
10 - cp3yqng2019-07-10域名+路径的方式存储cookie,感觉像只有一台业务服务器,那后台如何过分布式系统呢,用户中心是一个系统,核心业务是其他的系统,这里cookie肯定要共享,应该有一级域名和二级域名等等的概念吧,麻烦老师在解释解释。我本人是做移动端开发的,都是自己把token写在网络底层的请求头中,其实核心思想是一样的,但是缺点就是所有的域名里面都带token,这样也不好,好像还有优化的空间。
作者回复: 只要cookie设置了domain和path属性,浏览器在访问uri时就会根据这两个属性有选择地发送cookie。 需要根据自己的业务需求,恰当设置cookie的作用域,太大太小都不好。
6 - 大小兵2019-07-10要是能把session和token也说一下就好了
作者回复: 这个不在http范围之内,而且篇幅有限,还望见谅。
共 2 条评论6 - kissingers2019-12-10哈哈,就是九品芝麻官里的半个烧饼:你后人凭这个来找我
作者回复: nice。
4 - chengzise2019-07-10老师好,我理解的广告跟踪那个原理是:用户访问A网站,A会给用户设置cookies(T),用户再次访问网站B时,浏览器会带上cookies(T),B网站就能够识别到被A标记的用户。这里A给用户设置的cookies里面是不是把domain设置为B网站?不然凭什么访问B网站的时候,浏览器会带上A设置的cookies。
作者回复: 在这个场景里B是“第三方cookie”,不是A设置的,所以只要在页面里嵌入了B相关的代码,就会带上B的cookie。 完全弄清楚可能还需要一点html的知识。
4 - 业余爱好者2019-07-101.Max-Age: 是永久有效的意思。 2.cookie在浏览器端禁用,还有就是安全性,因为在本地是明文存储的
作者回复: 1不对,max-age=0,就是立即过期,不允许缓存,只能在浏览器运行期间有效。
4 - quaeast2020-02-15老师您好,我一只搞不懂cookie和session的区别
作者回复: Cookie是存在客户端的,session是存在服务器的,都是用来保存用户的会话信息。 Cookie属于http协议的规定,而session不是协议规定,只是服务器的一种实现方式。
共 2 条评论4 - 許敲敲2019-12-26还有个名词,session 这个适合cookie放在一起的,这个老师能简单解释下嘛?
作者回复: session是指服务器保持与客户端的会话过程,利用了cookie来存储会话信息,它是服务器上的概念。 session本身与http关系不大,是在http的应用过程中出现的,基于cookie,是cookie的一个具体应用实例。
4 - 彧豪2019-07-21话说现在还有用cookie的吗?感觉似乎不是太安全吧,毕竟各种明文传输,我司是这么做的:浏览器登录成功, 服务端会设置一个密文的cookie, 然后浏览器再用带着这个cookie值的请求头字段去请求用户信息的接口来获取用户信息, 当然了还有其他的头字段,然后登陆之类的接口中的相应头也看不到set-cookie字段,但是浏览器的cookie中却能被设置上一个cookie键值对,以及是密文的
作者回复: 有些公司为了兼容性还是用cookie的。
共 5 条评论4 - 院长。2019-07-11老师我是那个回复URI会跳转的那个,其他的测试案例也都会跳转。 您说的实验环境openresty需要我配置什么嘛?我应该是顺着看您的文章的,您专栏里哪一章有介绍我漏看的吗? 如果是我漏看的麻烦老师说下在哪一节,谢谢老师啦。
作者回复: 感觉是dns域名解析被缓存了,走了其他真实网站,没有使用本地的hosts文件,可能要清理系统的域名缓存,具体方法可以搜一下。
3 - Maske2020-06-14samesite的加入是为了在一定程度上防范CSRF,比如a.com页面中有个恶意表单,提交url为b.com的域名为开头且为银行转账接口地址,且为post请求,用户误操作后会将本地cookie(domain为b.com)发送,导致账户损失,设置samesite为Lax后可避免该cookie的发送,防止该情况出现。
作者回复: good
3 - 钱2020-03-291:如果 Cookie 的 Max-Age 属性设置为 0,会有什么效果呢? 有效期为0秒,那就是服务器委托给浏览器暂存的信息,在浏览器一关闭时就失效。 如果想设置Cookie永不过期,怎么搞设置一个超大过期时间嘛?特殊值-1行不行? 2:Cookie 的好处已经很清楚了,你觉得它有什么缺点呢? Cookie好处是能够保持状态信息,同样这个特点也是坏处尤其是被不怀好意的人获取之后。除此之外多传信息总会占用更多的带宽,降低传输效率,不过想传多一点也不行她的大小也是有限制的。所以,出现了别的存储技术来解决这个问题。展开
作者回复: 1.-1好像和0是等效的,时间长有点记不清了,你可以看一下rfc。 2.总结的不错。
2 - GitHubGanKai2020-01-13老师,有几个问题我不是很明白1⃣️:如果用户没有登录,浏览器向服务器发送请求的时候,是否还会产生cookie呢?如果会产生,那么用来干嘛呢?2⃣️:有关session,他是保存在服务器上的,如果用户没有登录,服务器是否还会产生session吗?我的理解是:应该不会产生吧!毕竟服务器保存session需要额外的空间!而且用户又没有登录,保存它做什么呢🤔?3⃣️:假设现在有三个浏览器,一个在深圳,一个在北京,一个在上海,它们都是没有登录的,同时访问同一台服务器,假设没有session的存在,会出现服务器返回数据的时候,出现无法一一对应的情况吗?就是,本来这个响应是返回给深圳那个浏览器的,结果错乱的发送给北京的那台浏览器去了!展开
作者回复: 1.cookie并不是需要登录才会产生,而是用来记录网站的信息,比如你不登录,它也可以记录访问时间、历史记录等,可以理解成是当做一个匿名的guest用户。 2.同理,session在服务器端保存的是用户的信息,只要你登录网站,就可以认为是一个匿名用户,就可以产生session。当然网站也可以不记录,决定权在它自己。 3.每次http请求都是一个来回,是在一个tcp上发送的,所以肯定不会乱。但因为http是无状态的,如果不用cookie,就无法区分每次请求是否为同一个用户。所以,通常的做法是在cookie里把你当做一个匿名用户。
共 2 条评论3