cookie和session

  

  谈到cookie与session,就不得不说说HTTP协议了,因为HTTP协议本身是一种“无状态”的,所谓的无状态,就是指当浏览器(客户端)发送一次请求并成功登陆后,下一次发送请求则该服务器不知道你是哪个客户端。所以,今天我们就谈到了cookie机制和session机制。

cookie(存放在本地、浏览器):

  cookie是一种数据存储技术,是将服务器返回回来的数据(cookie)给浏览器,再将保存到本地。

  当用户第一次通过客户端发送请求登录成功后服务器将返回数据(cookie)给浏览器,将cookie保存到本地。当用户再次的访问服务器时,浏览器会自动将cookie与其他数据发送给服务器,服务器通过校验cookie内容判别为哪个用户。这样就记录了客户端的访问状态。

session(存放在服务器上):

  session又称“会话控制”,也是一种数据存储技术,存储用户相关的信息。

  当用户发送请求创建session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识 (session id),如果没有,则为客户端创建一个session并且生成一个与此session相关联的session id,服务端将保存这个session,并返回给客户端保存session id。如果客户端的请求里包含有session id,则索引到对应的session并使用。

用户登陆过程中的cookie和session保持过程

参考博客原址: https://blog.csdn.net/a754895/article/details/82632747

  

  假设没有设置其他cookie情况下,A在第一次访问B时,B会为A创建一个属于A的session,并在B响应A时通过cookie保存sessionid响应给A。这样A在第二次访问B的时候,A带着cookie(此时里面有sessionid)请求B,B收到请求后会通过cookie的sessionid辨识出属于A的session,这就是整个过程。

cookie与session的区别:

  1.cookie是存放在本地,而session是存放在服务器上的

  2.session要比cookie安全一些

  3.session占用服务器资源,如果很多用户访问,会增大服务器性能的压力。

建议:

    将登陆信息等重要信息存放为session中
    其他信息如果需要保留,可以放在cookie中

提一下token

token(保存在浏览器Application->Local Storage):

  token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行认证的一个标识。

  当用户第一次登录时,服务端校验用户名和密码,校验成功则生成一个token并将此token返回给客户端,以后客户端只需带上这个token请求即可,无需再次带上用户名和密码。

     参考:https://blog.csdn.net/mydistance/article/details/84545768

     https://www.cnblogs.com/jing99/p/11785070.html

注意:

  token可预防csrf攻击,cookie跟session不行

    接到请求后,login_required

  先通过get_auth获得request.header.Authorization中的token
  然后调用authenticate,进而调用我们自己定义的verify_token来解析token
  如果解析不出错,就将解密的用户信息从数据库载入服务器内存
  否则返回false
  login_required接到false后调用error_handler进而调用自定义的error_handler,返回身份认证失败的信息,错误码401

  

  现在前后端分离采用:前端:webstorage  后端:token(保存在浏览器Application->Local Storage)

原文地址:https://www.cnblogs.com/c-pyday/p/11172837.html