cookie搞懂(你可能不知道的cookie)
cookie搞懂(你可能不知道的cookie)
2024-11-21 07:31:18  作者:踏碎了树荫  网址:https://m.xinb2b.cn/know/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

作者:谢郁

  • 深圳车牌夫妻过户后还能摇号吗(粤B牌照可以转让他人吗)
  • 2024-11-21粤B牌照可以转让他人吗在深圳车牌摇号难已经是众所周知的事情在深圳摇中车牌号就像是中了9月1日起全市“限外”也正是执行了可想而知一张粤B有多重要最近会有小伙伴问于怀深圳车牌可以转让给其他人吗?很多人不知道可以不可以转圈妹告诉。
  • 奶油西兰花家常做法(需要把握这些知识点)
  • 2024-11-21需要把握这些知识点所需食材:西兰花500克,牛奶75克,清油70克,葱末、姜末各2克,盐2克,糖3克,味精10克,水淀粉50克,汤适量制作方法:把西兰花去花根,劈开洗净,用开水焯一下倒出坐勺放油,葱、姜炝锅,加汤、盐、。
  • 湖南长沙到韶山一日游(湖南长沙游玩必去几个地方景点)
  • 2024-11-21湖南长沙游玩必去几个地方景点长沙,湖南的省会城市,承载着几千年的历史,很多人都想去长沙,在长沙的街头走一走、看一看,又不知道该去哪些景点、那么跟着小编玩转长沙吧1、橘子洲橘子洲位于长沙市区中湘江江心,是湘江下游众多冲积沙洲之一橘。
  • 朱见深最宠爱的公主(爱上了大自己十多岁的女人)
  • 2024-11-21爱上了大自己十多岁的女人有句玩笑话这么说:“男人对于女人的审美只有一个,那就是年轻”但历史上有这么一个皇帝,专宠了一辈子的宠妃只是一个卑微的女婢,也上了年纪比自己的父亲仅仅小3岁,比自己大了17岁,但这个皇帝对她极宠,还差点。
  • 全球人口在减少还是在增加(世界人口会一直保持增长吗)
  • 2024-11-21世界人口会一直保持增长吗汉斯在2014年的时候,看到了一张令人毛骨悚然的曲线图,那就是埃博拉病毒爆发后的感染数据,它并不是按直线增长的,而是翻倍增长翻倍增长是一种很可怕的速度平均来讲,每一个感染埃博拉病毒的患者在去世前会感染。
  • 马首铜像年内回圆明园展出(马首铜像重回圆明园)
  • 2024-11-21马首铜像重回圆明园↑马首铜像在圆明园正觉寺文殊亭陈列展出新华社记者李贺摄新华社北京12月2日电题:百年梦圆:马首铜像重回圆明园新华社记者罗鑫施雨岑时隔160年,“万园之园”圆明园迎来流失海外重要文物——马首铜像的回归1。
  • 茄子炖花蚬子怎么做好吃(茄条五花肉炖蚬子)
  • 2024-11-21茄条五花肉炖蚬子食材与明细茄条五花肉炖蚬子的做法步骤7.炒制茄条微微变软放入一品鲜酱油、蚝油翻炒均匀添加清水开始炖制温馨小提示随着社会营养意识的普及,人们吃海鲜不再吃“鲜”,而是吃“营养”那么,作为贝类海鲜家族的一员。
  • 关于牛郎织女的所有故事(关于牛郎织女爱情故事的记载这里最全)
  • 2024-11-21关于牛郎织女爱情故事的记载这里最全一,天河之东有织女,天帝之女也,年年机杼劳役,织成云锦天衣,容貌不暇整天帝怜其独处,许嫁河西牵牛郎,嫁后遂废织衽天帝怒,责令归河东,许一年一度相会涉秋七日,鹊首无故皆髡,相传是日河鼓与织女会于河东,役。
  • 下一站幸福李小冉于和伟(于和伟李小冉接棒)
  • 2024-11-21于和伟李小冉接棒2018年江苏卫视都市情感题材电视剧持续霸屏,同时也因内容的各色荟萃,让观众感受到了不同情感故事的缤纷色彩正在江苏卫视幸福剧场播出的轻科研情电视剧《南方有乔木》,爱情和科创并举,也让不少观众沉浸在了工。
  • 炒豌豆粒的家常做法(怎么做炒豌豆粒)
  • 2024-11-21怎么做炒豌豆粒主料:豌豆200克、猪肉60克、玉米粒60克、胡萝卜40克、花生仁(油炸)40克辅料:油2勺、盐2勺、料酒1勺、蚝油2勺准备食材,豌豆事先煮熟,花生炒熟胡萝卜切丁,猪肉切丁用料酒、盐、蚝油腌一会起油锅。
  • 不可一世的意思是什么(怎么理解不可一世)
  • 2024-11-21怎么理解不可一世形容人自命不凡;狂妄自大到了极点成语出处:宋·罗大经《鹤林玉露·荆公见濂溪》卷一五:“荆公少年,不可一世士,独怀刺侯濂溪三及门而三辞焉”成语用法:动宾式;作谓语、定语、补语;含贬义,形容狂妄自大示例:。