美文网首页
聊一聊Cookie

聊一聊Cookie

作者: 追风的云月 | 来源:发表于2018-03-01 09:46 被阅读0次

老生常谈,讲一讲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中。

相关文章

  • 聊一聊Cookie

    老生常谈,讲一讲cookie的诞生。由于HTTP协议是无状态无连接的,每次请求服务器端都无法识别发起请求方的身份,...

  • 聊一聊 cookie

    什么样的数据适合放在cookie中? cookie是怎么设置的? cookie为什么会自动加到request he...

  • 聊一聊 cookie

    cookie 是怎么工作的? 首先必须明确一点,存储cookie是浏览器提供的功能。cookie其实是存储在浏览器...

  • 聊一聊cookie ,session

    tips:接下去会在github写博客,简书不再更新和修改文章,欢迎大家逛逛我的新博客点击查看 ,我会尽量用更容易...

  • 聊一聊Cookie、Session和Token吧

    经常忘记Cookie、Session和Token,那么今天就来记录一下它们,聊一聊。 1.Cookie、Sessi...

  • 【前端推荐第9天】聊一聊 cookie

    今日推荐文章:《聊一聊 cookie]》 原文作者:ruoyiqing, 来源 segmentfault 推荐阅读...

  • 前端面试 1000道!

    基础强化 聊一聊前端存储。(1)老朋友cookie(2)短暂的sessionStorage(3)简易强大的loca...

  • 聊一聊

    就是这样,喜欢自我欺骗,明知道,真心想你,或者有事的人,会打电话给你。却还是忍不住的用微信,看一个人的消息和动态,...

  • 聊一聊

    记录一下,现在是女儿的生日。2020.7.25星期六 生日快乐我的小天使 微淼商学院说过最经典的话是:有些做商学院...

  • 聊一聊

    早在三天前师兄就告知我们今天上午老师会和我们在实验室聊一聊。校园卡余额不足,时间紧张未吃早餐,早上慌忙收拾赶紧到实...

网友评论

      本文标题:聊一聊Cookie

      本文链接:https://www.haomeiwen.com/subject/xbawxftx.html