zoukankan      html  css  js  c++  java
  • 关于cookie,session和token

    一.理解HTTP“无状态”的含义

      我们知道,HTTP是一种无状态的协议,客户端与服务器建立连接并传输数据,数据传输完成后,连接就会关闭。

      举个栗子,如果在无状态情况下访问淘宝,会出现以下场景:

      1)打开淘宝的url,在这一步输入用户名和密码;

      2)在首页选择一样商品,点击进去,又提示需要重新登录。因为HTTP是无状态的,虽然在第1步中已经输入了用户名和密码,但我们的客户端不会记住上一步输入的用户名和密码,而服务器也不会记住已登录的状态;

      经过上述例子,我们可以把“无状态”理解为:不会对本次会话设置缓存区,来分别记录客户端和服务器在临时会话中产生的数据

      理解了HTTP无状态的含义,再去看cookie,session和token的概念。

    二.cookie的概念 

      cookie是HTTP定义在header中的一个字段,是具体存在于浏览器上的,仅仅是浏览器实现的一种数据存储功能。它是session的一种后端无状态实现。

      cookie由服务器生成,发送给客户端的,客户端把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。

    三、session

      Session在广义上是指一种网络通讯的会话机制,用于跟踪用户;在狭义上,Session是在服务器端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中:

      

      1)客户端第一次请求服务器;

      2)第一次创建session时,服务器在内存中开辟一块空间,并返回Session ID;

      3)因为服务器需要记录用户状态,故在响应信息中包含一个SetCookie的响应头,要求客户端在Cookie中记录Seesion ID;

      4)客户端根据SetCookie中的响应头信息,将sessionID存储在Cookie中;

      5)再次请求服务器,客户端会在请求头信息中携带Cookie请求头;

      6)服务器根据客户端携带的请求头进行用户身份、状态等较验。

      由上图中的步骤可以得知,从广义上讲,session是一种网络通讯的会话机制,用于跟踪用户。而cookie在这个过程中的作用是用于保存Session ID的。cookie只是目前用于实现session机制的主流方案之一。

    四、token

      token是存储在客户端的令牌,一般用于身份校验。

       

      值得一提的是,在上述步骤②生成token时会加入有效期,而在步骤⑥解析token时,也会去判断token是否过期。

      步骤④存储token时,可以存储在cookie或者redis中。

      步骤⑤携带token时,可以在url中携带,也可以在post请求或http的header中携带。

    五、session和token的区别

       1)token和session都用于身份验证,session是会话,token是令牌;

      2)身份认证 token的安全性要高于session,因为每个请求都有签名还能防止监听以及重放攻击,而session必须靠链路层来保障通讯安全。

      3)session和token都需要去管理过期时间。

    HTTP“无状态”的解释:https://www.cnblogs.com/bellkosmos/p/5237146.html

    cookie,session,token的概念:https://blog.csdn.net/lcgoing/article/details/86754955

    https://www.zhihu.com/question/19786827/answer/28752144

  • 相关阅读:
    POJ_1066_Treasure Hunt_判断线段相交
    【转载】VS写汇编程序01:VS2015配置汇编语言开发环境
    【转载】汇编调试程序Debug使用
    【转载】C++ STL快速入门
    Longest Palindromic Substring
    Leetcode经典试题:Longest Substring Without Repeating Characters解析
    C++数组的初始化
    C++题目:回文数判断
    C++-int类型整数超出范围后的处理
    Memorise Me!——用数值做地址,实现快速查找
  • 原文地址:https://www.cnblogs.com/May-study/p/11649816.html
Copyright © 2011-2022 走看看