cookie搞懂(你可能不知道的cookie)
cookie搞懂(你可能不知道的cookie)
2024-11-25 05:55:12  作者:踏碎了树荫  网址:https://m.xinb2b.cn/life/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-25办理值机是什么意思值机是民航为旅客办理乘机手续(换登机牌、收运旅客的托运行李、安排旅客的座位)到了机场后直接去机票所属航空公司的值机柜台办理值机手续,出发层大厅里有办票信息系统大屏幕的你寻找自己的航班号,然后到相应的柜。
  • dnf漫游附魔怎么附(DNF全职百科漫游装备)
  • 2024-11-25DNF全职百科漫游装备哈喽,大家好!这里是能看懂的DNF全职百科、百科教学、热点资讯;看角色攻略,看我就够了,一站式教学,一篇看完本期内容:DNF全职百科——《漫游》装备、加点、附魔等细节完善一篇看完!DNF最帅的职业男漫。
  • 数字14的寓意(数字14有什么寓意)
  • 2024-11-25数字14有什么寓意喜事到来:数字1的谐音是有,数字4的谐音是喜,所以两者连在一起就是有喜的含义在风水中,数字14也就成了喜事到来的寓意,意味着在不久后家中即将会有贵人到访、添丁加子、发财旺运、事业晋升等等喜事发生,可见。
  • 哪个是对的人(那个对的人在哪儿)
  • 2024-11-25那个对的人在哪儿民政部发布的统计数据显示,2021年我国结婚登记数据为763.6万对这是继2019年跌破1000万对、2020年跌破900万对大关后,结婚登记数据再次跌破800万对大关,对此有报道认为,中国第四次“单。
  • 书荒推荐黑暗流排行榜(让套路死在摇篮里面)
  • 2024-11-25让套路死在摇篮里面八本反转文,让套路死在摇篮里面,带你领悟套中套小老弟说,不点关注的话就画个圈圈诅咒明天你追的小说就要断更了1,斯坦索姆神豪作者:余云飞简介:父慈子孝二傻子;万年绿帽一粒蛋二刀流龙瓦里安;无尽船王吉安娜。
  • 彭加木在罗布泊是怎么失踪的(彭加木罗布泊失踪谜团)
  • 2024-11-25彭加木罗布泊失踪谜团彭加木是我国著名的生物化学学家,失踪前任新疆科学院副院长他先后15次到新疆进行科学考察,3次进入巴音郭楞蒙古自治州罗布泊进行探险,1980年6月17日不幸在罗布泊失踪他失踪后,党中央国务院多次派出人员。
  • 克里斯·巴姆斯特德伤病(克里斯布姆斯特德谈)
  • 2024-11-25克里斯布姆斯特德谈作为一个古典健美选手,自从2019年首次击败“黑天鹅”布雷翁·安斯利,获得奥林匹亚先生之后,克里斯·布姆斯特德已经连续4年拿到了奥林匹亚的最高荣耀——山道奖杯英俊帅气的外表,高大健壮的身材,让布姆斯特。
  • 荒漠化和干旱日是哪天(荒漠化和干旱日介绍)
  • 2024-11-25荒漠化和干旱日介绍每年的6月17日为世界防治荒漠化和干旱日1994年12月19日第49届联合国大会根据联大第二委员会(经济和财政)的建议,通过了49/115号决议,从1995年起把每年的6月17日定为“世界防治荒漠化与。
  • 1985年澳门八仙饭店灭门惨案(凶手连杀10人灭门)
  • 2024-11-25凶手连杀10人灭门#头条原创#解说澳门真人真事改编电影《八仙饭店之人肉叉烧包》1978年香港老黄是个无赖,并且十分好赌,喜欢打麻将,但牌运很差,输钱是常有的事,一次在麻将桌上,老黄因为手气背,就再次找麻友借钱,从对话。
  • gm眼镜真假怎么区别(gm眼镜真假如何区别呢)
  • 2024-11-25gm眼镜真假如何区别呢GM墨镜区别真假的方式是非常简单的,因为GM墨镜的官网是提供真伪查询服务的,所有的正品的GM墨镜都是有一张验证卡片的,上面有很多和墨镜相关的信息,从官网上进行验证查询,如果和卡片上的信息一致的话就是正。
  • 反诈重要事情说三遍(别忘了这些反诈知识)
  • 2024-11-25别忘了这些反诈知识2021年,武汉防诈宣传“铺天盖地”,不仅大街小巷、单位社区随处可见,民警和社区群干开展了“扫楼行动”,给每家每户送来了宣传单,还通过微信“入圈入群”,学校的“小手拉大手”也送来了防诈宣传单,甚至外卖。