首页 > 其他分享 >token、session和cookie的对比

token、session和cookie的对比

时间:2023-11-10 16:48:45浏览次数:44  
标签:请求 用户 购物车 token session Cookie cookie server

Cookie

1991 年 HTTP 0.9 诞生了,当时只是为了满足大家浏览 web 文档的要求 ,所以只有 GET 请求,浏览完了就走了,两个连接之间是没有任何联系的,这也是 HTTP 为无状态的原因,因为它诞生之初就没有这个需求。

但随着交互式 Web 的兴起(所谓交互式就是你不光可以浏览,还可以登录,发评论,购物等用户操作的行为),单纯地浏览 web 已经无法满足人们的要求,比如随着网上购物的兴起,需要记录用户的购物车记录,就需要有一个机制记录每个连接的关系,这样我们就知道加入购物车的商品到底属于谁了,于是 Cookie 就诞生了。

Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行 Session 跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息 

 以加入购物车为例,每次浏览器请求后 server 都会将本次商品 id 存储在 Cookie 中返回给客户端,客户端会将 Cookie 保存在本地,下一次再将上次保存在本地的 Cookie 传给 server 就行了,这样每个 Cookie 都保存着用户的商品 id,购买记录也就不会丢失了

 仔细观察上图相信你不难发现随着购物车内的商品越来越多,每次请求的 cookie 也越来越大,这对每个请求来说是一个很大的负担,我只是想将一个商品加入购买车,为何要将历史的商品记录也一起返回给 server ?购物车信息其实已经记录在 server 了,浏览器这样的操作岂不是多此一举?怎么改进呢

 

Session:

仔细考虑下,由于用户的购物车信息都会保存在 Server 中,所以在 Cookie 里只要保存能识别用户身份的信息,知道是谁发起了加入购物车操作即可,这样每次请求后只要在 Cookie 里带上用户的身份信息,请求体里也只要带上本次加入购物车的商品 id,大大减少了 cookie 的体积大小,我们把这种能识别哪个请求由哪个用户发起的机制称为 Session(会话机制),生成的能识别用户身份信息的字符串称为 sessionId,它的工作机制如下

 

 

session 的痛点:

看起来通过  cookie + session 的方式是解决了问题, 但是我们忽略了一个问题,上述情况能正常工作是因为我们假设 server 是单机工作的,但实际在生产上,为了保障高可用,一般服务器至少需要两台机器,通过负载均衡的方式来决定到底请求该打到哪台机器上。

 

 

 

 

标签:请求,用户,购物车,token,session,Cookie,cookie,server
From: https://www.cnblogs.com/yuyangblog/p/17824428.html

相关文章

  • 前端存储:localStorage、sessionStorage
    IDE:HBuilderX3.8.12-- 序章前端存储数据的方式有以下几种:JavaScriptCookieWeb存储localStoragesessionStorageHTML5WebSQL数据库IndexedDB 本文测试其中的Web存储:localStorage、sessionStorage。添加数据查看数据普通数据JSON数据删除数据清......
  • ts + axios token无感刷新,及重新请求后页面不刷新问题
    最近上班遇到的新需求,token无感刷新,参考了很多博客,也看了渡一老师的视频,功能是实现了,但是发现重新请求后页面数据没有更新遇到相同问题的先理清代码执行顺序和Promise,看看执行结果有没有resolve()出去。话不多说,直接上代码,因为自己封装的请求和大家的不一样,仅供参考无感刷新token......
  • 集群中几种session同步解决方案的比较
    在集群中session安全和同步是个最大的问题,下面是收集到的几种session同步的方案,希望能通过分析其各自的优劣找出其适应的场景。1.客户端cookie加密简单,高效。比较好的方法是自己采用cookie机制来实现一个session,在应用中使用此session实现。问题:session中数据不能太多,最好只有......
  • vue2获取cookie/删除cookie/设置cookie
    起因,访问不同路由跳到首页/需登录账号demo<template><div><button@click="setCookie">设置Cookie</button><button@click="getCookie">获取Cookie</button><button@click="deleteCookie">删除Cook......
  • session过期时间
    在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户没有使用系统一定时间后,自动退出登录,销毁session。 具体设置很简单: 在主页面或者公共页面中加入:session.setMaxInactiveInterval(900); 参数900单位是秒,即在没有活动15分钟后,session将失效。 这里要注意这个sess......
  • PostgreSQL CPU占用高分析,查询IO消耗最高的SQL,查询耗时最长的SQL,查询被锁住的session
    查看当前活跃的DB session 正在运行的SQL语句(运行时间超过10秒)SELECTnow()-query_startas"runtime",usename,application_name,client_hostname,datname,state,query FROMpg_stat_activity WHEREnow()-query_start>'10seconds'::interval ......
  • 创建一个Cookie缓存,进行接口防抖
    1.新创建一个Cookie缓存 Name:SavePInformationHttpCookienewCookie=newHttpCookie("request");newCookie["SavePInformation"]=DateTime.Now.ToString("yyyy-MM-ddHH:mm:ss");newCookie.Expires=DateTime.Now.AddDays(1);Response.Co......
  • StringTokenizer
    Java中StringTokenizer的一个实例。 代码:StringTokenizerst=newStringTokenizer("thisisatest");while(st.hasMoreTokens()){System.out.println(st.nextToken());}打印出来之后是:thisisatest 接下来的实例阐明了Stirng.split方法如何将一个......
  • 利用路由守卫实现token过期后返回登录界面
    consttimeX=localStorage.getItem("time");//如果有时间戳存在会判断token是否过期if(timeX!==null){consttime=timeX.slice(1,-1)//获取了token的过期时间consttokenTime=newDate(time);constcurrentTimeUS=newDate();constcurrentTimeCN=newDate(cu......
  • Jwt生成token详解
     publicStringcreateTokenByBao(StringuserId){Datedate=newDate();Stringtoken=Jwts.builder()//创建一个JWT构建器,用于创建和配置JWT。.setSubject(userId)//主题--生成token所需内容设置.setIssuedAt(date)//签发时间......