cookie搞懂(你可能不知道的cookie)
cookie搞懂(你可能不知道的cookie)
2024-07-02 02:21:58  作者:踏碎了树荫  网址:https://m.xinb2b.cn/tech/aiz135558.html
大家都了解的cookie

很多前端面试题都会考察cookie 大家一般都能答上的几个点:

不能跨域存储空间有限,4KB通过document.cookieAPI进行get和setcookie与其他本地存储的区别大小不同,cookie是最小的。数量受限,每个域名下的cookie数量最多为20个(但很多浏览器厂商在具体实现时支持大于20个)某个域下的cookie会自动随该域下的请求带在request header的cookie字段里。可以设定过期时间。可以设定path,而其他存储往往只有域的限制。存在httpOnly属性,只能由服务端设置,JS无法设置和获取。可以设置secure属性,当设置为true时,只能在HTTPS连接中被浏览器传递到服务器端进行会话验证,如果是HTTP,连接则不会传递该信息,所以不会被窃取到Cookie的具体内容。可以通过浏览器的清除历史功能清除用户可以禁用cookiecookie的应用场景cookie最大的特点是自动随该域下的请求带在request header的cookie字段里,而无需额外的JS操作,在做通用的登录认证系统的时候有着天然的优势。cookie有httpOnly属性,可以防止XSS攻击,安全性比其他存储更有保障。服务端在控制页面跳转的时候可以不通过JS方便的进行少量值的传递,控制页面的展示。静态资源CDN之所以放在非主域名下,很大一部分原因在于可以无需携带相关cookie,减少流量损耗。cookie的属性

cookie搞懂(你可能不知道的cookie)(1)

cookie的增删改查

服务端和JS端都可以对cookie进行增删改查, cookie中不得包含任何逗号、分号或空格,(可以用encodeURIComponent()来保证).

服务端设置cookie

服务端通过在请求的response header中携带Set-Cookie字段对cookie进行设置, 格式与用JS设置cookie是相同的,都采用;进行属性分隔. 例如:

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly

JS设置cookie

JS设置domain: 默认值为当前域, n级域名可以设置 小于n级域名的domain. 例如: 在www.baidu.com域下 可以将domain设置为 baidu.com, 但是不能设置为a.www.baidu.com, 也不能设置为tieba.baidu.com,更不能设置为sina.com.

JS设置path: 默认为/, path的设置不受限制, 比如我可以在im.baidu.com/todo下将cookie的path设置为/search

JS对于secure属性,无论get还是set ,必须在https下,

JS不能设置httponly属性,

删除cookie: 指定key, domain, path 必须与想要删掉的cookie一模一样, 然后将expires的值设为一个过期值,即可删除.

修改cookie: 指定key, domain, path 必须与想要修改的cookie一模一样, 否则将创建一个不同的cookie,然后设置想要更新的value或expires值.

var cookie = { getCookie: function (key) { return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" encodeURIComponent(key).replace(/[\-\.\ \*]/g, "\\$&") "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null; }, setCookie: function (opts) { if (Object.prototype.toString.call(opts) !== "[object Object]") { return; } if (!opts.key) { return; } if (!opts.value) { opts.value = ''; } var tmp = opts.key '=' encodeURIComponent(opts.value) ';'; if (opts.expires) { tmp = 'expires=' new Date(new Date().getTime() opts.expires * 1000).toGMTString() ';'; } if (opts.path) { tmp = ('path=' opts.path ';'); } if (opts.domain) { tmp = ('domain=' opts.domain ';'); } if (opts.secure) { tmp = 'secure' } document.cookie = tmp; }, delCookie: function (opts) { cookie.setCookie({ key: opts.key, value: '', expired: -1000000000, path: opts.path, domain: opts.domain, }) }, }

其他

判断是否启用cookie

使用navigator.cookieEnabled可以判断用户是否启用cookie

if (!navigator.cookieEnabled) { // 让用户知道,开启网页中的cookies是很有必要的.}

是否可以直接修改header中的cookie字段?

Ajax请求可以设置header,但是某些header字段无法设置,比如refer, cookie等.

cookie自动删除

cookie 会被浏览器自动删除,通常存在以下几种原因:

会话 cooke (Session cookie) 在会话结束时(浏览器关闭)会被删除持久化 cookie(Persistent cookie)在到达失效日期时会被删除如果浏览器中的 cookie 数量达到限制,那么 cookie 会被删除以为新建的 cookie 创建空间。

CORS请求携带cookie

CORS请求默认不发送Cookie和HTTP认证信息。如果要把Cookie发到服务器,一方面要服务器同意,指定Access-Control-Allow-Credentials字段。

Access-Control-Allow-Credentials: true

另一方面,开发者必须在AJAX请求中打开withCredentials属性。

var xhr = new XMLHttpRequest();xhr.withCredentials = true;

否则,即使服务器同意发送Cookie,浏览器也不会发送。或者,服务器要求设置Cookie,浏览器也不会处理。

需要注意的是,如果要发送Cookie,Access-Control-Allow-Origin就不能设为星号,必须指定明确的、与请求网页一致的域名。同时,Cookie依然遵循同源政策,只有用服务器域名设置的Cookie才会上传,其他域名的Cookie并不会上传,且(跨源)原网页代码中的document.cookie也无法读取服务器域名下的Cookie。

希望本文能帮助到您!

点赞 转发,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓-_-)

关注 {我},享受文章首发体验!

每周重点攻克一个前端技术难点。更多精彩前端内容私信 我 回复“教程”

原文链接:http://eux.baidu.com/blog/fe/你可能不知道的cookie

作者:谢郁

  • 爱情公寓5隐藏的10个细节(爱情公寓5前几集太枯燥)
  • 2024-07-02爱情公寓5前几集太枯燥《爱情公寓5》如今已经播出大半了在这个过程中,无论是前期粉丝对于该剧的预约量还是后期节目的热度这部最终季都交出了一张相当不错的答卷当然,更令人欣慰的是因为《爱情公寓5》剧组足够的用心,一定程度上逆转了。
  • 嘉靖是怎么当上皇帝
  • 2024-07-02嘉靖是怎么当上皇帝大明正德十六年(1521年),明武宗朱厚照驾崩,由于没有子嗣,所以经过皇室和大臣们的商议,决定由武宗的堂弟兴王朱厚熜继承皇帝位几天后朱厚熜由封地湖北安陆启程,赴北京即位,他就是著名的明世宗嘉靖皇帝。
  • 世界公认的光头影帝(光头影帝20岁秃顶被嘲)
  • 2024-07-02光头影帝20岁秃顶被嘲昨晚头条盛典可真是热闹,章子怡在家坐月子,让吴京替她领奖,吴京真把自己当做章子怡了,娇羞的挽着徐峥出场,真是笑坏众人妻子陶红和黄磊同时获奖,罗志祥和张艺兴玩性大发,欢送黄磊和陶虹上台领奖,还试图蹭个合。
  • 家里养柠檬树怎样才能养好(养柠檬树的方法)
  • 2024-07-02养柠檬树的方法土壤:柠檬树可以在家中种植,结出几个好看又好吃的果子一般使用普通的园土或腐叶土,然后在盆底铺上一些碎瓦片,在土壤上加上陶粒等光照:它需要接受充足的光照才能更好地结出果子,每天最少要将植株放在光照下6个。
  • iphone8以下机型最高支持几w充电(然而最大功率只有7.5瓦)
  • 2024-07-02然而最大功率只有7.5瓦无限充电可以说是新一代iPhone非常值得期待的功能了,目前市场上的无线快充技术已经非常成熟,但貌似此次苹果没有跟上脚步,支持无限充电的iPhone8最大功率只有7.5瓦,无限充电彻底变为无线慢充据日。
  • 林心如为什么一直演鬼片(被称鬼后的林心如)
  • 2024-07-02被称鬼后的林心如说来林心如这几年的作品真是不少,电视剧没少演,电影也不耽误然而在电影界的打拼大家又给她封了一个新的头衔“鬼后”林心如这些年演的电影几乎全是鬼片,为什么呀?电视剧里不管是什么角色心如都可以驾驭的很好,可。
  • 负荆请罪发生的故事(故事背后的故事)
  • 2024-07-02故事背后的故事中国的经典故事,很多都有故事背后的故事今天我们用成年人职场的眼光细细品读一下“负荆请罪”故事背后的故事蔺相如在“渑池之会”中使赵王免受秦王的屈辱,赵王大为感激回国以后,赵王就封他为上卿,这样一来,蔺相。
  • 汤唯分手的决心获奖合集(汤唯分手的决心)
  • 2024-07-02汤唯分手的决心《Hunt》、《分手的决心》、《Broker》海报2022年坎城影展公布入围名单,有3部韩片将勇闯坎城影展,包括是名导是枝裕和执导的《Broker(掮客)》由宋康昊、姜栋元、裴斗娜、IU(李知恩)、李。
  • 姚明的资料(人物评价)
  • 2024-07-02人物评价职业篮球运动员,司职中锋,现任亚洲篮球联合会主席、中国篮球协会主席、中职联公司董事长兼总经理,改革先锋奖章获得者1998年4月,姚明入选王非执教的国家队,开始篮球生涯2001夺得CBA常规赛MVP,2。
  • 三星note7国行召回吗(三星终于正式道歉)
  • 2024-07-02三星终于正式道歉再经历了重重波折和争议之后,三星中国官方网站今天正式道歉,并公布了Note7手机召回的细节三星今天官方发布公告:Note7水货可退!赠品不用归还,坏了也给退,想留着收藏不行以下为公告主要内容,标出红字。
  • 夏季常见湖南野菜(长沙疾控野菜正当时)
  • 2024-07-02长沙疾控野菜正当时三湘都市报·新湖南客户端5月5日讯(全媒体记者李琪通讯员张恒陈典)随着气温升高,植物生长迎来茂盛时期我国野菜约有300多种,但供人们习惯食用的也只有数十种,如:马齿笕、芥菜、藜蒿、蕨菜等,春夏时节吃一。