【没有实践系列】关于cookie的学习笔记

数字探秘者
• 阅读 1068

一、前言

一直在扭螺丝,完全没有碰过登录这块,只能先从文章学习学习

二、几个点过一遍

1. http协议是无状态协议

我们都知道,http协议是无状态协议,服务器不知道到底是哪个靓仔在请求它的接口,那这个特性会导致什么问题呢?
最常见的就是,比如我登录了一个页面之后,紧接着请求一个接口,这个时候如果我不携带一些参数过去,那根据这个特性,接口是不知道我是那个已经登录好的用户。

2. cookie,session,token

基于上面那个问题,后面就出现了两套解决方案,

(1)一套是cookie + session

在用户首先登录输入完账号密码之后,后端校验之后,在接口返回的时候后端会写一段代码在响应的时候后把一个sessionId存入cookie中,(注意这里是后端操作的,这个步骤不用前端参与),接下来后面的接口请求的时候都会自动带上cookie给后端(cookie的特性之一),后端就知道这个请求时哪个登录了的用户

缺点:
1.后端要存这个session的信息,有资源消耗;
2.要处理session在不同服务器共享的问题;

(2)一套是cookie+token

一旦登录的用户多起来,这个session的消耗是巨大的,为了解决这个问题,后面就改成后端不保存这个session,那不保存了,要怎么校验这个身份呢?
那些靓仔想到一种叫token(令牌)的校验,原理是这样。
同样是用户登录输入完账号密码之后,同样是要返回一个id给客户端并且存起来,但是这个时候,后端再用一个算法加一个密钥对这个id做一个签名,并把这个签名跟数据一起保存在cookie,
接下来接口请求的时候一样带上cookie,此时后端校验的时候,他拿到数据后再用同样的算法和密钥再做一个签名,然后对比这个签名是不是跟你传过来的签名是一样的

3. cookie的基本介绍

1. 什么是cookie

cookie是用来存储文本信息的文件,在硬盘空间可以找到(设置了过期时间的话),在浏览器可以看到,按F12,浏览器缓存那里就可以看到。

2. cookie作用

主要用来保存会话状态,它的特性之一会跟随接口的调用自动带上(设置的时候配置),所以一旦cookie多了,也会有性能的问题。
当然也有人用它来做数据缓存,但是一般不推荐,因为这玩意有大小限制,单个不能超过4k,临时存数据还是考虑localStorage这种

3. cookie相关知识

(1)大小
单个限制4k,什么叫单个,看图
【没有实践系列】关于cookie的学习笔记
一条就是单个,而且总的大小也是有一个限制,不同浏览器好像不同,比如Firefox每个域名cookie限制为50个。

(2)操作(这里指前端)

  • 创建一个cookie
document.cookie="userId=828999";
  • 创建一个cookie,多个键值对的话,用分号分割
document.cookie="userId=828;username=lll";
  • 重写,保证name一样
document.cookie="userId=999";
  • 删除,设置expires属性,属性值为过去的时间
//获取当前时间
var  date=new  Date();

//将date设置为过去的时间,减了1毫秒就肯定是过去的时间
date.setTime(date.getTime() - 1);

document.cookie="userId=999;expires="+date.toGMTString();
  • 读取cookie,这个读取的值是全部的cookie,读出来的值是一串很长的字符串,需要自己处理切割
document.cookie

【没有实践系列】关于cookie的学习笔记

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Stella981 Stella981
3年前
Django用户认证
COOKIE与SESSION概念cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生。cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上cookie,这
Stella981 Stella981
3年前
Django 之 cookie和session
一、Cookie1、Cookie的由来因为HTTP协议是无状态的,无状态的意思就是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,也不会受前后请求响应情况直接影响。简而言之,对服务器来说,每一次请求都是全新的。状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态就是这些数据不
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
3A网络 3A网络
2年前
一文读懂浏览器存储与缓存机制
一文读懂浏览器存储与缓存机制浏览器存储CookieCookie是HTTP协议的一种无状态协议。当请求服务器时,HTTP请求都需要携带Cookie,用来验证用户身份。Cookie由服务端生成,存储在客户端,用来维持状态。通常Cookie由以下值构成:名称(name)值(value)域(Domain)值(value)路径(Path)