cookie搞懂(你可能不知道的cookie)
cookie搞懂(你可能不知道的cookie)
2024-06-01 11:15:14  作者:踏碎了树荫  网址:https://m.xinb2b.cn/sport/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

作者:谢郁

  • 虐心的短文故事(虐心的短文请深读)
  • 2024-06-02虐心的短文请深读来年春天,我给你摘一朵桃花夏天都是干燥的,每当骑着自行车夏风迎面而来,大家都期待每次夏风的袭来,是心里的舒爽,是心里包含不自知的期待每每划过脸的时候,就如同流星雨砸在了心里,填满心头的满足牧左耳,你听。
  • 迷你世界变形金刚大黄蜂会飞吗(会的哟)
  • 2024-06-02会的哟迷你世界变形金刚大黄蜂会飞让我们先看下在大黄蜂装扮在游戏里的显示效果,风游个人感觉还原还是非常不错的,还原度相当高,不亏是变形金刚正版授权皮肤,做的真的精致然后就是变形功能啦,和擎天柱皮肤一样,大黄蜂。
  • 卡点枪声怎么弄(视频的卡点枪声怎么设置)
  • 2024-06-02视频的卡点枪声怎么设置打开美册视频制作,点击下方的粉红色小圆圈进入视频制作;在视频制作页面,选择上方的特效视频,然后在特效视频里找到98K卡点点击进入;进入98K卡点视频模板以后可以看到视频效果,如果喜欢,点击下方的立刻制。
  • 浙江低龄化解决方案(浙江萧山让不合格父母)
  • 2024-06-02浙江萧山让不合格父母孩子犯罪未尽责家长受教育16岁的小吴是湖南人,从小就觉得父母偏心,因此与父母的关系一直不好随着小吴的长大,他与父母的交流越来越少,也愈加沉默寡言因不想继续读书,辍学后小吴独自到浙江萧山打工,父母对此也。
  • 湘湖之最佳旅游攻略 杭州过去3小时车程
  • 2024-06-02湘湖之最佳旅游攻略 杭州过去3小时车程都市快报Author:记者江胜忠编辑陈棠棣林幽不觉春已深,摇落冰芳雪满襟寒玉晨凝瑶池露,琼花夜散天女心苍原月白丘壑冷,瀚海星沉晓云阴恣意东风歌一曲,不须檀板不须琴——选自徐贤良《凤城万亩梨花行赏得句》。
  • 白斑病衍生出来的危害有哪些(白斑病因那么多你都了解)
  • 2024-06-02白斑病因那么多你都了解白癜风是一种生活中的常见疾病,白癜风对人们的健康有着很大的威胁,很多人都会问这个问题,为什么我们会患上白癜风呢?因为白癜风破坏了很多患者的生活治疗白癜风的好方法,让一些患者很痛苦,于是,今天我们来了解。
  • 哪些网站可以发布售房信息(想在网上卖房子)
  • 2024-06-02想在网上卖房子如今是网络信息时代,人们在生活中早已离不开网络而网络确实也给大家的生活带去了很多便利,无论是聊天、购物、娱乐,都可以通过光纤得以实现曾经卖房子需要到处张贴广告,如今也可以通过一些网站挂出售房信息,售房。
  • 范冰冰杨幂谁是红毯之王(范冰冰杨幂出演爵迹)
  • 2024-06-02范冰冰杨幂出演爵迹最近话题最热的电影《爵迹》,因为其超高颜值的演员阵容和郭敬明的银幕处女秀的热门话题,让这部电影还未开拍就达到了全民关注的热度但是颜值显然并不是这个阵容的全部法宝,来看看小四挑选的这些演员,个个都是好会。
  • 单片机各代码含义(单片机的程序有多大)
  • 2024-06-02单片机的程序有多大之前一直很奇怪一个问题,每次写好单片机程序之后,用烧录软件进行烧录时,能看到烧录文件也就是hex的文件大小:我用的单片机芯片是STM32F103C8T6,程序储存器(FLASH)只有64K从上图可以看。
  • 一袭白色蕾丝连衣裙优雅大气(一条蕾丝连衣裙)
  • 2024-06-02一条蕾丝连衣裙黑色花边大摆长连衣裙两件套香蒂莉蕾丝覆盖的里布是可脱卸的,单穿也是得体的而外连衣裙可以作为一件长外套来穿,搭配你的T-SHIRT和牛仔裤(这也是BYRON喜欢的LOOK)这款蕾丝连衣裙,是让小虫姐感动。
  • 数字定式思维题(数字翻转VS思路的变通)
  • 2024-06-02数字翻转VS思路的变通比较一下,让数字反转当他以破坏来威胁时,你先想想他有什么长处如果你能让他做有用的事,同时给他想要的东西,他就会放下破坏的念头,转而支持你斗争和直接给好处都不是好办法你最好让他做点事情,然后给他想要的利。