cookie搞懂(你可能不知道的cookie)
cookie搞懂(你可能不知道的cookie)
2024-11-21 07:37:25  作者:踏碎了树荫  网址: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的增删改查

服务端和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-11-22黛钗最后一次相见87版《红楼梦》成为我国电视史上不可超越的篇章和无法逾越的经典,剧中每个角色都活灵活现,仿佛从书中走出来一样,满足了我们对原著中所有人物的想象特别是饰演林黛玉的陈晓旭,更是经典中的经典虽然前有王文娟,。
  • 何香凝讲粤语(国人皆如此倭寇何敢)
  • 2024-11-22国人皆如此倭寇何敢正式上映6天,票房接近12亿,斩获2020年全球周末票房冠军,并一举夺得本年度全球首部连续6天单日票房过亿的影片上海四行仓库抗战纪念馆成为热门打卡地,每天的参观者络绎不绝,人们留下鲜花、水果,以表悼念。
  • 埃隆马斯克最新访谈(法媒将名字改为)
  • 2024-11-22法媒将名字改为据法新社11月7日报道,一些账号经过身份认证的推特用户遭到平台封号,原因是他们将用户名改为“埃隆·马斯克”以嘲讽这位社交网络的新老板拥有200万粉丝的演员凯茜·格里芬就是这些用户之一她还把自己的头像换。
  • 名字中有子是什么意思
  • 2024-11-22名字中有子是什么意思子在名字中=子在名字中间=在姓名3个字的中间(强调不是姓名的最后那个字)中国古人姓名的字,多与名正相关或反相关“子”是最常用的意思就是“你”,有时不用“子”而用“尔”,意思还是一样例如:鲁肃,字子敬,。
  • wordpress实现标签功能代码(WordPress网站的标签Tags是什么)
  • 2024-11-22WordPress网站的标签Tags是什么在WordPress网站的文章里有一项“标签Tags”,这个项目代表什么意思?该如何填写呢?“标签Tags”是一种具体化分类法说到分类,我们会想到网站的类别概念是的,网站的文章是放在类别之下的但分类可。
  • 紫芳草扦插能活吗(一起了解一下)
  • 2024-11-22一起了解一下一般说紫芳草最常用的繁殖方法就是播种,因为它种子比较多,但是也可以扦插,只是用的比较少紫芳草;常绿开花植物,因花期长,花色美,花型好,被大多数人所喜欢!尤其是在冬天有供暖的北方,紫芳草可以做到一年四季。
  • 正宗麻辣干锅鸡的做法大全(大厨分享麻辣干锅鸡)
  • 2024-11-22大厨分享麻辣干锅鸡大家好,这里是第一名厨,关注我们,会有更多的美食供您参考,让您的生活更加美味干锅是川菜的一种制作方法成菜后汤汁较少、油脂较多、香味浓郁口感麻辣鲜香、回味无穷,深受美食爱好者的喜爱今天给大家分享一道在家。
  • 咽拭子采样全流程(记者体验咽拭子采样全过程)
  • 2024-11-22记者体验咽拭子采样全过程湖南日报咽拭子采样检测,是抗击新冠肺炎的重要环节之一,也是密切接触者、疑似患者确诊或排除的关键技术支撑3月12日,在黄冈市疾控中心,记者体验了咽拭子采样全过程鼻咽拭子是更好的标本选择湖南支援黄冈医疗队。
  • 买房要用正确的投资姿势(还是个好投资项目吗)
  • 2024-11-22还是个好投资项目吗北京章哥,房地产从业20年,通晓业内门道,我不做所谓的“专家”,只用二十年实战经验帮大家答疑解惑提问:章哥,我是会计,所以总计算投资回报率我今年24岁,家里给了200万让买房,我手中还有一些,能买50。
  • 包头违停抓拍新规定(最新电子抓拍汇总)
  • 2024-11-22最新电子抓拍汇总关于全市违法抓拍点位的告知近年来,包头市公安局交通管理支队陆续在全市范围内的城市道路及土右、石拐、固阳、达茂、白云等旗县区国省县道上,建设并经公示启用了电子警察抓拍设备这些设备的启用,有力的打击了交通。
  • 官方贝尼特斯出任大连一方新帅(大连一方报价贝尼特斯)
  • 2024-11-22大连一方报价贝尼特斯英国的《泰晤士报》报道在6月18日的一则消息称:大连一方以年薪1200万欧元欲邀请纽卡斯尔联主教练贝尼特斯执教球队我们暂时不去讨论这个消息是真还是假,不过,以目前大连一方的状况来看,确实已经到了换帅的。
  • 三年绣花功美了一座城(三年绣花功美了一座城)
  • 2024-11-22三年绣花功美了一座城重庆垫江三合湖湿地公园,2019年7月开工动建,2020年12月主体成型,2021年12月达到对外开放条件,2022年7月正式开园三年匠心打造,昔日“脏乱差”的城郊地带最终蝶变“高大上”的城市公园,展。