【HTTP】cookies和session的爱恨情仇

如何区分不同用户——Cookie/Session机制详解 https://www.cnblogs.com/zhouhbing/p/4204132.html 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session。 1.1 Cookie机制 在程序中,会话跟踪是很重要的.. 阅读详情

我是少侠露飞。学习塑造人生,技术改变世界。

引言

cookies和session是前后端开发不得不去正视的概念,也是面试中的高频面试点。但是cookies和session的区别,以及分布式session的解决方案,你真的掌握了么?本篇侧重从这两个方面介绍。

cookies和session的区别

首先要明白为什么有cookies和session。

由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个session是保存在服务端的,有一个唯一标识。在服务端保存session的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 session信息都是放在内存的,使用一些缓存服务比如Redis之类的来放 session。

那么服务端是如何识别特定的客户呢?

这个时候cookies就登场了。每次HTTP请求的时候,客户端都会发送相应的cookies信息到服务端。实际上大多数的应用都是用 cookies来实现session跟踪的,第一次创建session的时候,服务端会在HTTP协议中告诉客户端,需要在 cookies里面记录一个sessionID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。有人问,如果客户端的浏览器禁用了 cookies怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。

cookies用来保存网站密码

cookies其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到cookies里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是cookies名称的由来,给用户的一点甜头。

所以,总结一下:session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;cookies是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现session的一种方式。

分布式session的解决方案

经过上面的粉分析,我们已经知道,cookies是保存在浏览器的,session是保存在服务器。那么在分布式服务中,如何解决session的问题呢?

1 Session Sticky

在分布式环境中,保证同一会话每次都由同一台服务器处理。就好像在单机环境下处理一样,这就叫Session Sticky。
要实现此,目前主要是负载均衡器根据请求的会话标识来做请求转发,比较典型的如Nginx的IP哈希,能保证每次同样的客户端请求都打到同一台服务器上来处理。
此方案主要缺点如下:

  • 如果一台服务器宕机或者重启,机器上的所有会话数据都会丢失,相关的用户就要重新登录。
  • 会话标识是应用层的消息,那么负载均衡器需要将同一会话的请求都保存到同一个服务器上的话,就需要进行应用层(第7层)的解析,这个开销比第4层的交换要大。
  • 负载均衡器变为了一个有状态的节点,要将会话保存到具体服务器的映射。和无状态的节点相比,内存消耗会更大,容灾方面会更麻烦。

2 Session Replication

分布式服务器之间进行session的同步和备份。主要是靠应用容器来完成session的复制从而使得应用解决session问题的,应用本身并不需要关心session同步的事情。
在这里插入图片描述

此方案带来的问题如下:

  • 同步session数据造成了网络带宽的开销。只要session数据有变化,就需要将数据同步到所有其它服务器上,机器数量越多,同步带来的网络带宽开销就越大。
  • 每台服务器都需要保存所有的session数据,如果整个集群的session数据很多的话,每台机器用于保存session数据的内存占用会很严重。

因此,该方案并不适合集群机器数较多的场景,如果只有几台机器,可以考虑用这个方案。

3 Session数据集中存储

同样是希望一个会话请求可以转发到不同的服务器上,刚才的session replication是一种方案,另一种就是这里要介绍的session数据集中存储。
在这里插入图片描述

那么该方案的问题是什么呢?

  • 读写session数据引入了网络操作(相对于本机的数据读取而言),问题就在于存在时延和不稳定性,不过我们的通信都发生在内网,问题不大。
  • 如果集中存储session的集群发生了问题,就会影响我们的应用。

4 Cookie Based

和前面的思路不同的是,该方案是通过cookie来传递session数据的,即把session存放在cookie中。
不过这个方案依然存在不足:

  • cookie长度的限制,进而限制了session数据的长度。
  • 安全性。session本来是服务端的数据,该方案使得服务端数据到了外部网络和客户端,因此存在安全性问题。

即使我们可以对cookie里的session数据加密,不过对于安全来说,物理上不能接触才是安全的。

  • 带宽消耗。cookie中包含session数据,数据中心的整体外部带宽的消耗提高了
  • 性能影响。每次HTTP请求和响应都带有session数据,对web服务器来说,在同样的处理情况下,响应的结果输出越少,支持的并发请求就会越多。

小结

对于大型网站来说,Session Sticky和Session数据集中存储是比较好的方案,而这两个方案又各有千秋,需要开发在具体的场景中做出选择和权衡。

点点关注,不会迷路

基于MacOS本地部署OpenClaw+Ollama技术要点 本文基于MacOS系统下本地部署OpenClaw+Ollama的实操经验,梳理部署全流程中的核心技术要点、环境配置规范、故障排查方法及落地优化方案,聚焦“本地AI模型联动OpenClaw技能调度”的核心需求,为同类本地部署场景提供可复用的技术参考,规避常见部署风险,确保系统稳定运行。 阅读详情

相关推荐

解决Windows 10安装语言包时遇到的0x800F0954错误

在安装Windows 10操作系统的语言包时,如果遇到错误代码0x800F0954的提示,这无疑会让许多用户感到困惑和无助。这个错误通常意味着在安装过程中遇到了一些阻碍,导致无法正常完成语言包的安装。本文将为大家详细解析这个错误代码0x800F0954,并提供一系列有效的解决方法,帮助大家顺利安装所需的语言包。

nntxthml的博客 3793

Session是如何识别一个用户(浏览器)的?

Session是如何识别一个用户(浏览器)的?1. 由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Sessi

只有变秃 才能变强 1万+

Linear超高PSRR线性稳压器-典型应用电路解析

本文整理完了LT3045数据手册内所有的典型应用电路,试图让沉默的电路开口,简单介绍了他们这样做的目的和原理,从中我们可以更加熟悉这颗经典芯片的应用。但也有一些电路并没有搞懂,遗留下了不少问题。

硬件工程师笔记 2942

Session是通过利用设置在Cookie中的id来区分访问的用户

Session是通过什么区分每一个用户的 参照了网上内容 整合 部分修改

7847

别再只会setStyleSheet了!Qt实现背景透明的5种方法全解析(附性能对比)

本文深入解析Qt实现背景透明的5种高阶方案,包括QPalette、setWindowOpacity、QGraphicsOpacityEffect、样式表和复合透明方案,并提供详细的性能对比与优化建议。针对不同平台和场景,帮助开发者选择最适合的透明效果实现方式,提升UI设计质量与性能表现。

weixin_27061475的博客 259

十一种室内定位传感器方案汇总介绍与对比(机器人、物联网领域)

室内定位传感器方案汇总 目录 室内定位传感器方案汇总 1、定位方案概述 1.1、内定位系统有最基本的5种算法: 1.2、常用的室内定位技术主要包括以下几种: 1.3、定位理论 1.4、不同的定位方案对比 2、各种定位方案详细介绍 2.1、单线激光定位 2.2、多线激光定位: 2.3、视觉定位: 2.4、基于射频识别(RFID)技术室内定位 2.4.1、RFID标签(不涉及...

JK-Cool的博客 3万+

Cookie/Session机制详解--如何区分不同用户

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session。 1.1 Cookie机制 在程序中,会话跟...

cjdjcdj的博客 567

GAN模型中的常见变体有哪些,如DCGAN、WGAN和CGAN等?

生成对抗网络(GAN)是一种强大的深度学习模型,它由生成器和判别器两个网络组成,通过对抗训练的方式实现生成数据的能力。随着研究的发展,出现了许多GAN的变体,每个变体都有其独特的改进和特点。

huidhsu的博客 2262

JavaWeb编程(四)session及application的使用

1.会话:客户端向服务端发送请求,服务端接受请求并响应这样一次连续的过程,称为一个会话(session)。 2.可实现登录访问控制功能:login.jspdoLogin.jspindex.jsp1).进入登录页面login.jsp,输入用户名,密码后跳转到业务处理页面doLogin.jsp;2).在doLogin.jsp拿到用户录入的用户名密码校验后,把用户名放到session中,转到主界面in...

weixin_30945039的博客 414

华为od 面试八股文_前端_03_含答案

华为od 面试八股文_前端_03_含答案

MISAYAONE的博客 2130

java技术专家【面试】Java程序员英语面试整个流程

java技术专家【面试】Java程序员英语面试整个流程

大壮 755

关于服务器如何判别不同用户,以及判断用户登录状态执行相应功能

关于服务器如何判断不同用户请求

m0_73700925的博客 1592

MounRiver Studio(MRS)使用技巧:添加头文件目录;增加代码分组

MounRiver Studio(MRS)使用技巧:添加头文件目录

cheng___yi的博客 1809

spring利用session判断用户的登陆状态,实现强制登陆

文章目录前言用户登陆注销登陆拦截器类(强制登陆功能的关键):拦截器在springmvc-servlet.xml里的配置: 前言 在web项目里,当用户量少时 我们通常用session来判断用户的登陆状态,以此来实现强制登陆 强制登陆概念: 只有当用户用帐号密码登陆后,我们在浏览器上可以访问购物车,订单等页面,否则会自动跳转到登陆页面; 用户登陆 当用户第一次登陆时,我们手动向session里存入一个登陆标识,用来存入用户的状态: //登陆 @RequestMapping("/login"

木泽锐 2486

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

会话跟踪技术Session

会话 1) Http是无状态的 - HTTP 无状态 :服务器无法判断这两次请求是同一个客户端发过来的,还是不同的客户端发过来的 - 无状态带来的现实问题:第一次请求是添加商品到购物车,第二次请求是结账;如果这两次请求服务器无法区分是同一个用户的,那么就会导致混乱 - 通过会话跟踪技术来解决无状态的问题。 2) 会话跟踪技术 - 客户端第一次发请求给服务器,服务器获取session,获取不到,则创建新的,然后响应给客户端 - 下次客户端给服务器发请求时,会把sessionID带给服务器,那

AmorFati1996的博客 492

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

接口测试——requests---session简介

——http协议是无状态的,也就是每个请求都是独立的。那么登录后的一系列动作,都需要用cookie来验证身份是否是登录状态,为了高效的管理会话,保持会话,于是就有了session session简介 session是一种管理用户状态和信息的机制,与cookies的不同的是,session的数据是保存在服务器端。说的明白点就是session相当于一个虚拟的浏览器,在这个浏览器上处于一种保持登录的状态。 session登录 格式: # session 用法 | Basic Usage:: | |

Asaasa1的博客 585

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Session权限验证实战

不是所有用户都会展示所有数据,假如只有管理员可以查看所有用户信息,而可能有人不从登录页进入,而是直接进入展示用户页面,这个时候就需要权限验证了,验证用户是否登录,使用session来验证,因为它的存储域更加广是在一次会话有效,而转发只能是一次请求有效。

m0_63926154的博客 735

session识别当前登录用户的逻辑

今天做分布式遇到的坑,模块各自独立,存储用户信息的seesion位于用户模块,其它模块调用无法直接获取当前用户信息。 原因:其它模块调用相当于还是做http请求了,也就是其它模块相当于一个新的浏览器了,这个新的浏览器没有携带Cookie信息,所以无法追踪获取相应的当前用户。 原理:之前虽然知道session是存储于服务端的,可以用来存放用户信息,获取当前登录用户的信息,但我却不知道它是如何识别是哪一个用户的。 实际上是每次登录时也就是发送请求第一次创建Session的时候,服务端会在HTTP协议中告诉

沙丁鱼的博客 715

如何区分不同用户?Cookie/Session详解,基于Token的用户认证——JWT

Cookie和Session作用都是跟踪用户的整个会话。Cookie是存在于客户端的“客户通行证”,Session是存在于服务端的“客户档案表”。 Cookie: 为什么产生:一个用户的所有请求操作对应一个会话,另一个用户则对应另一个会话,但是由于HTTP协议的无状态特性,服务器无法单从连接上跟踪到会话。 来源:服务端response向客户端浏览器颁发Cookie,存储在客户端的浏览器中。 作用:当浏览器再次请求该网站时,浏览器把url+Cookie提交给服务器,在服务端进行验证。 操作:服务端操

Snippers的博客 2019

Cookie/Session机制详解——如何区分不同用户

转载博文, 原文地址会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session。 1.1  Cookie机制在程序中,会话

胡嘿嘿 1917

计算机网络中的几十个经典问题及回答,看完就掌握了!!!

子网掩码的作用:确定一个IP地址的网络部分和主机部分。它是一个与IP地址相对应的二进制数字,用于将IP地址划分成网络地址和主机地址两部分。子网掩码中的1表示网络部分,0表示主机部分。变长子网掩码(Variable Length Subnet Mask,VLSM):一种允许在同一个网络中使用不同子网掩码长度的子网划分技术。传统的子网掩码是固定长度的,即对于一个网络,所有子网的子网掩码长度是相同的。而使用变长子网掩码,可以对不同的子网使用不同的子网掩码长度,从而更灵活地划分子网。

m0_74520482的博客 1976

计算机网络基础问答题

1、简述OSI的七层体系结构和每层的功能。 答:物理层:提供为建立、维护和拆除物理链路所需要的机械的、电气的、功能的和规程的特性;有关的物理链路上传输非结构的位流以及故障检测指示。   数据链路层:在网络层实体间提供数据发送和接收的功能和过程;提供数据链路的流控。   网络层:控制分组传送系统的操作、路由选择、拥护控制、网络互连等功能,它的作用是将具体的物理传送对高层透明。   传输层:提供建立、维护和拆除传送连接的功能;选择网络层提供最合适的服务;在系统之间提供可靠的透明的数据传送,提供端到端的错误恢复

E^x的博客 2932

一文带你快速鉴别Cookie&Session

本文将教你Cookie和Session的基本使用,同时将两者进行一个比较

热爱编程、热爱生活、热爱探索 2422

Session会话追踪的实现机制

在Web应用程序中,我们经常要跟踪用户身份。例如:当一个用户登录成功后,如果他继续访问其他页面,Web程序如何才能识别出该用户身份?当一个用户在操作自己的购物车时,Web程序如何才能识别出该用户身份?因为HTTP协议是一个无状态协议,即Web应用程序无法区分收到的两个HTTP请求是否是同一个浏览器发出的。为了跟踪用户状态,服务器可以向浏览器分配一个唯一ID,并以Cookie的形式发送到浏览器,浏览器在后续访问时总是附带此Cookie,这样,服务器就可以识别用户身份。...

weixin_54535063的博客 482

登录计算机时区分不同用户民,10分钟让你区分Session和Cookie区别.doc

10分钟让你区分Session和Cookie区别SessionSession定义一般被翻译为‘会话’,具体到Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。因此从上述的定义中我们可以看到,Session实际上是一个特定的时间概念。session工作原理session机制是一种服务器端的机制,服务器使用一种类似于散列表...

weixin_35728532的博客 362

网络基础知识 100 问 必备!!!

链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。

qq_23710315的博客 976
上一篇: 【Kafka技术内幕】(三):Kafka生产者:高可用Producer和ISR机制
下一篇: 商业计算怎样才能保证精度并防止溢出
少侠露飞
博客等级 码龄9年 214粉丝 117原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值