面试后的cookie理解

894 阅读4分钟

作为一位不甘养猪的人,毅然决然的踏上了北漂之路。今天是我面试的第一天,总体感觉就是懵的慌。但好处是终于不闭门造车了,算是一个考试吧,心理考试和技术考试,查缺补漏挺好的,下面切入正题


  • 什么是cookie?知其然知其所以然
    英文直译是小饼干,小点心(记住是小饼干,也就记住它的储存容量小了),那为啥叫饼干点心呢,源于最开始的http是无状态的,但业务慢慢变得特别复杂,需要保存状态,也就诞生了小点心,它使业务能力更强(用户一定时间不用输入账号密码登录,个性化设置等等)也就使http从无状态变得甜了点(个人理解) 盗取网络图片奉上

这里的大小是指有关cookie的所有大小字节("username=Bill Gates; expires=Sun, 31 Dec 2017 12:00:00 UTC; path=/"这一嘟噜都算)(因为保存形式是txt小文件,所有有关cookie的都在里面)

  • cookie在哪查看呢?看得懂啥呢?
    Chrome 开发者工具-> Application-> Storage-> Cookies,双击它会出现浏览器打开的网站,你会发现好多cookie,还看不懂(应该是出于安全方面签名加密了,毕竟这东西比较隐私),看不懂下面的,可以了解看看上面的头Name,Value,Domain,Path,Expires,Size,HttpOnly,Secure,SameSite。

    • name和value就不细说了就是键值对,(就好比小学作业本上的姓名:王大拿);
    • Domain指的就是该cookie所属的域(网址/前面的,http://www.后面的部分 例如baidu.com
    • Path指的是目录,默认不设置是/(根目录),表示该目录下都可以使用cookie
    • Expires指的是过期时间,就是cookie的失效时间(删除cookie的方式)
    • Size指的是该条cookie的大小,单位是字节(cookie的储存形式是字符串
    • HttpOnly因为开发者一定会有带黑帽子的操作js,js可以直接document.cookie直接操作修改cookie这是很可怕的,设置HttpOnly就是不让js操作修改,只能http传输时候用,有效的防止了xss跨站脚本攻击
    • Secure安全的意思么,可以联想http想到https协议么,这个就是指是否能在https协议中使用
    • SameSite 很好的作用是防止csrf的跨站请求伪造,只允许同站使用,别的网站请求时不能自动发送

    火狐浏览器类似chrome不做叙述

cookie的这些字段可以用node或php做相关设置,可利用Set-Cookie header来创建一个Cookie (就是http响应头设置cookie)

  • 大概了解了cookie,那他是怎么干活的呢?
    我们作为用户来说,填上了相关信息发给服务器,服务器会返给你一个相关设置的cookie,里面存的就是有关于你的信息,当下次你在去访问这个服务器时做请求提交等相关操作时,浏览器先检查cookie过没过期,没过期就自动将cookie发送给服务器,浏览器会这样一直发送,直到Cookie过期为止。(前提是你没有关闭cookie),服务器拿到cookie后确定了,“啊原来是你啊,你好,xxx”就这样它就正常工作了。
  • 前端操作cookie这样就行了
    • 设置cookie document.cookie = "username=Bill Gates; expires=Sun, 31 Dec 2017 12:00:00 UTC; path=/";
    • 读取cookie var x = document.cookie;(会将所有cookie输出)
    • 删除cookie(直接把 expires 参数设置为过去的日期) document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";

cookie的设置是覆盖性的,和react的setData似的,一样的更新,没有的追加
做练习时记得开服务locolhost:不要用file://,我试验时卡这卡半天,大家不要犯这低级错误

总结

  • cookie容量小4kb左右,浏览器储存有个数限制(理解见第一条)
  • cookie中有name,value,domain,path,expires,size,httpOnly,sameSite等字段,其中有两个是有关前端安全的(httpOnly,sameSite),前端安全我后续也会大概总结,作为我的理解我的分享
  • cookie的工作原理,不过期不禁止就自动发,然后服务器做检验判断你是谁等等状态(上面的第三点说的就是原理)
  • 怎么操作cookie(设置,读取,删除)这个不墨迹看上面写的
  • 最后一点也是今天面试官问我的我答差了,cookie的储存形式是什么?应该是字符串类型,我回答的json是错的,面试的笔试题是“浏览器中的cookie有一个key是username,它对应的value是jack,请问如何获取cookie中的username”,这个大家想一想或者上网搜一下网上有好多

不知道会不会有人看到,第一篇博客不写不知道一写吓一跳,有不对的欢迎大家批评指出,最后祝我早日找到工作哈哈哈