# 浏览器 Cookie 老生常谈

浏览器 Cookie 老生常谈

cookie是一个前端必备的知识了,我在刚入行的时候,也是草草研究整理了一篇,当时并不知其所以然。

传送门:

简单聊聊Cookie 和 Session

https://www.jianshu.com/p/4f3b683afa4c

最近重新整理了一下知识点,烂笔头一下~。。

Cookie的起因

为什么会有cookie呢,根本原因就是浏览器是无状态的。你可以想象他就是一个傻子,他记不住客户端长什么样子。

可是对于前端非常重要的一个需求就是,识别不同的用户,是否登录登出,是管理员还是用户。

既然浏览器无状态,他就不能帮我们识别这些需求。

那么该如何识别用户呢,假想我们去迪士尼(某网站),这个门票(登录状态)是可以玩(持续)两天的,第二天你再去售票处(某网站入口),售票员(网站)怎么记住你呢?

server在你第一次登录的时候,也就是第一次入园的时候,就给你个特殊的票据,标记你来过,这个标记,就是cookie

response.setHeader('Set-Cookie', 'myDisneyTicket=xxx; login=yyy')

从此以后,在用户关闭client前,每次对该host访问,request都会自动带上cookie

而在server端获取cookie来判断用户身份。

 const cookie = request.headers.cookie // 获取cookie,是一个字符串,需要捕获成key: value

如何手动使cookie失效?response设置同样的cookie,但是比当前时间早就可以了

let time = new Date(0)  // 1970年,肯定比现在早了
response.setHeader('Set-Cookie', 'myDisneyTicket=xxx, expires='time.toUTCString()') //需要转换成格林威治时间

Cookie被伪造

用户在客户端是可以用JS伪造cookie的,这就是cookie不足的地方。

document.cookie = 'myDisneyTicket=xxx; login=yyy'

用户用JS伪造了一份ticket,愉快的免费游玩了Disney !

cookie可以被随意伪造,那是不是完全没用了。NO ! 想想一下你cookie的内容如果是随机码,那还有用户知道他的含义吗? 这个时候session 就诞生了。

cookie升级版:session

首先说下session:

它一个存储在server端的数据结构,它可以是对象,可以是数组,可以是任何数据结构。

它可以存在server端的"任何地方", 可以是内存,可以是数据库,大多数情况下是文件。

通常情况下,session的每一个key对应着一个用户信息

正如上所说,如果cookie的内容是一个随机码,而这个随机码和session数据结构中的key一一对应,那么server端一样是可以从cookie这个随机码里识别不同的用户,而且可以获取到额外的用户信息

重要的是这个session信息,server端可以选择存储的时长,更加方便。 但毕竟有存储就有占用,对服务器的负载和性能都会有一定影响的。

session: 基于cookie的升级

为什么这么说呢,按上面的推论来说,session来源于cookie的启发,但是sessionID的传递方式并不仅仅只有cookie,所以我这里说他是基于cookie思路的升级

我们可以把sessionID 存在localStorage 甚至url,任何可以告知给server端的地方都可以。

一句话总结

先有了cookie, server端在response里设置了cookie, 浏览器在以后的请求就无条件传回去。但是不安全,所以改传一个ID (可以不叫sessionID, 只是session比较形象)。 server端根据ID来获取用户数据,进而返回需要的数据,这样就安全了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,976评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,249评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,449评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,433评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,460评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,132评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,721评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,641评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,180评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,267评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,408评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,076评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,767评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,255评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,386评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,764评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,413评论 2 358

推荐阅读更多精彩内容

  • 目录Cookie机制什么是CookieCookie的不可跨域名性Unicode编码:保存中文BASE64编码:保存...
    Tomatoro阅读 16,952评论 7 186
  • 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Se...
    chinariver阅读 5,623评论 1 49
  • 作者:晚晴幽草轩www.jeffjade.com/2016/10/31/115-summary-of-cookie...
    饥人谷_Dylan阅读 1,225评论 0 51
  • 背景在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cooki...
    时芥蓝阅读 2,368评论 1 17
  • 古诗文竞赛之典故专题 1. 商女不知亡国恨,隔江犹唱后庭花。——杜牧《泊秦淮》“后庭花”是指陈后主曾做一首《玉树后...
    为为道来阅读 1,120评论 0 1