聊一聊Cookie

老生常谈,讲一讲cookie的诞生。由于HTTP协议是无状态无连接的,每次请求服务器端都无法识别发起请求方的身份,所以诞生了cookie机制,用以帮服务器端识别客户端身份。

Cookie是一小段文本信息,伴随着用户请求在 Web 服务器和浏览器之间传递。它存储于访问者的计算机中,每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。

cookie既可以在客户端设置也可以在服务器端设置。

服务器端使用Set-cookie,可以设置cookie的全部属性,如:
name,value,
domain(设置cookie的有效域,在该域才能获取),
path(它是在域名的基础下,指定可以访问的路径),
expires/max-age(cookie何时删除,max-age逐渐取代expires),
secure(浏览器使用HTTPS协议才会发送cookie到服务器),
http-only:JS无法读取和修改
客户端设置无法设置cookie的secure,http-only。

cookie会跟随任意HTTP请求一起发送到服务器端。

这个是浏览器的行为,但是也带来一个困扰,对于图片这样的资源请求,如果也带上cookie,带宽消耗就有点大了

cookie无法跨域名共享

二级域名都不能共享

每个域名下的cookie数量有限制,每个域名不超过20个,每个大小不超过4KB

毕竟是存在客户端,如果每个没有数量限制就面临存爆硬盘的风险了

cookie的名和值都需要进行URL编码后传输,相应的前端获取cookie时也需要解码,decodeURIComponent
安全性:由于cookie在HTTP中是明文传递的,其中包含的数据都可以被他人访问,可能会被篡改、盗用。

关于cookie的增删改查:

cookie是浏览器提供的一种机制,它将 document 对象的 cookie 属性提供给 JavaScript。可以使用JavaScript来创建和取回 cookie 的值,因此我们可以通过document.cookie访问它。

document.cookie=encodeURIComponent("username").trim()+"="+encodeURIComponent("username").trim();
document.cookie=encodeURIComponent("mtauthorityauthority").trim()+"="+encodeURIComponent("authority").trim();

使用cookie

let cookie = document.cookie;
let tempa = cookie.split(";");
let username="";
let authority="";
tempa.map((value)=>{
    if(value.split("=")[0].trim()===(encodeURIComponent("mtdname")).trim()){
        username=decodeURIComponent(value.split("=")[1].trim()).trim()
    }
    if(value.split("=")[0].trim()===encodeURIComponent("mtdauthority").trim()){
        authority=decodeURIComponent(value.split("=")[1].trim()).trim()
    }
    return null
});

删除cookie

let exp = new Date();
document.cookie=encodeURIComponent("username").trim()+"="+encodeURIComponent(jsonData.data.username).trim()+";expires="+exp.toGMTString();
document.cookie=encodeURIComponent("authority").trim()+"="+encodeURIComponent(jsonData.data.authority).trim()+";expires="+exp.toGMTString();

session

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录
在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
每个用户访问服务器都会建立一个session,那服务器是怎么标识用户的唯一身份呢?事实上,用户与服务器建立连接的同时,服务器会自动为其分配一个SessionId。

关于cookie和session的选择

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

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

推荐阅读更多精彩内容