美文网首页
聊一聊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

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