zoukankan      html  css  js  c++  java
  • 05-大白话说cookie和session通信到底是怎么一回事

    cookie和session说白了就是前后端通信的两个工具,cookie存在于浏览器,session存在于服务端。

    前后端通信,拿登录最为典型:

    1.首先,前端若想登录,肯定要发送一个字段名证明是你啊,当然了肯定要发送ajax请求,携带信息传给后端。怎么证明是你,比如你是这个网站的会员,你是这个公司的员工,会员有用户名,员工有工号,这些都是证明是你的唯一标识,就拿工号把。如wokerID=123456。

    2.然后正常的ajax请求登录接口,不管是get还是post请求(只是传参的位置url和请求体的不一样),带上这个workerID=123456,接着接口请求返回成功后,我们会拿到一个可以保持登录态的,以后访问任何接口都要携带的传给后端的token,那么这个token是怎么来的?

    后端要做什么?

    后端在接收到用户的请求后,会验证工号对不对,错的话,返回错误状态码和信息给前端,前端告知用户错了。对的话:

    后端会通过散列算法或者别的什么算法生成一个签名,目的就是为了确保这个是唯一的,接着:

    不管node还是php还是别的语言,都可以设置cookie,并把这个cookie的对应的值就是刚才通过算法得到的签名或者说是密钥。

    注意:本质上服务端是无法操作cookie的,服务端是通过设置响应报文,浏览器根据响应报文自行设置的,所以cookie的设置还是浏览器自己的行为。

    3.然后呢,因为上面说了,如果服务端设置了cookie,那么浏览器会自动把cookie存储起来,以后浏览器再发请求的时候,会自动携带上cookie(这是浏览器的默认行为,并且是放在请求头中),其实这是服务端传给后端token(也可以说是sessionID)的一种方式。

    另一种方式:因为cookie容量比较小,只有4Kb,后端还可以通过前端登录接口请求,以响应内容的方式告诉前端(当然后端不设置cookie也可以这样,只不过前端可以自行拿到token存储在cookie中),前端呢就可以拿到返回来的token存储在localStorage中。

    前端拿到这个token就相当于拿到了一个通行证,以后发送任何请求都要携带,证明是你发的,而不是别人随便就可以向后端请求,这也是安全性的一种表现。

    前端层面如vue中可以在请求拦截器中统一在header中设置token,这样以后访问所有接口都会自动带上这个头信息,这也相当于后端设置cookie,浏览器自动设置存储,每次请求也是在请求头中自动携带一个道理。

    4.最后,服务端在设置cookie的同时(上面说了,也可以不设置),也要设置session,这个session是干啥用的呢?

    说白了就是建立与cookie一一对应的关系,那么多员工,那么多用户,怎么知道谁是谁?

    php中会自动生成一个返回给前端同名的sessionID(如果是以接口返回那就叫token)文件。

    node中也会生成一个文件。存储用户信息。

    所以,当不同的用户登录或者请求的时候,服务端就会自动去寻找同名的sessionID文件(token)看是否与前端发来的一致。如果对上号了,就可以接着下面的接口请求,该怎样就怎样了。

    直到token被清除掉,登录态就没有了。

  • 相关阅读:
    作为一个大学才开始入门学计算机编程的孩子想要的东西-----听我扯,你蛋疼,他菊紧,我开心
    面向切面编程(AOP)的理解
    cakephp 的query方法,直接写在controller中是否 有点不合适
    《请不要辜负这个时代》
    我也谈——时间管理,让生活有序
    我也谈 AngularJS 怎么使用Directive, Service, Controller
    javascript 用call来继承实例属性
    好的资源
    angular 实现modal windows效果(即模态窗口,半透明的遮罩层),以及bootstrap(css,components,js)的初步学习
    javascript 按位或(|),无符号右移(>>>)运算,组合技巧来实现————密码强度提示,四种情况??
  • 原文地址:https://www.cnblogs.com/haoqiyouyu/p/14614451.html
Copyright © 2011-2022 走看看