cookie、session、sessionid 与jsessionid

article/2025/11/1 12:48:26

cookie、session、sessionid 与jsessionid,要想明白他们之间的关系,下面来看个有趣的场景来帮你理解。

 

  我们都知道银行,银行的收柜台每天要接待客户存款/取款业务,可以有几种方案:

  凭借柜台职员的记忆,由收柜台职员来为每位顾客办理存款/取款业务,单凭职员的记忆力,要记到每位顾客的相貌,并迅速这个顾客当前的存款以及存取的次数,每次存取的金额是多少。-----------这种方式表示协议本身支持状态。

     使用存折的方式,然后柜台职员就把每个顾客的存款/取款的信息保存在这张折子,然后交给顾客保管,当顾客来存款/取款时,只要拿出存折,职员查看存折就对当前这位顾客的存款/取款信息一目了然。当然,你马上会想到,顾客修改这个信息怎么办?我们也有措施对每次存款/取款记录后面盖章。无盖章的就是假冒信息。但如果顾客是真的要伪造,当然印章也是可以伪造的。-------------这种方式就是在客户端端保持状态。

     使用银行卡的方式,发给每位银行用户一张银行卡,银行卡上有一个唯一的卡号,没有其它任何信息,当顾客来存款/取款时,拿出银行卡,银行把卡号输入的电脑,很快就显示当前用户的存/取款记录。这种方式的安全性就会有很大的提高。用户想要手脚只有攻破银行的服务器来修改自己的存/取款信息,这样做难度会很大。---------这种方式就是服务器端保持状态。

 

Cookie 与session的产生过程                                

 

  我们都知道HTTP协议本身是无状态的,客户只需要简单的向服务器来发送请求下载某些文件,客户端向服务器端发送的每次请求都是独立的。对于当前的web应用,HTTP的“无状态”,导致许多应用都不得不花费大量的精力来记录用户的操作步骤。就像我们上面介绍的第一种情况,银行职员要花费大量的精力来记忆每一位用户的存/取款记录。

  程序员很快发现,如果能够提供一些按需生成的动太信息,会使web的交互能力大大增强。程序员一方面在HTML中添加表单、脚本、DOM等客户端行为,来增加web应用与客户端的交互性。另一方面在服务器端测出现了CGI规范以响应客户端的动态请求,作为传输载体的HTTP协议添加了文件上载、cookie 等特性。那cookie的原理与我们上面介绍的使用存折记录用户应为的方式是一样一样的。

  通过前面的例子我们已经发现,通过cookie的方式存储信息,可能会存在一点定的安全性,因为所有的信息都是写在客户端的,客户可能会对这些信息进行修改或清除。然后就又出现session的方式用于保存用户行为,这种方式的原理与前面介绍银行卡的方式是一样的。

  具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。

 

cookie与session的机制与原理                                                                 

 

   cookie机制。正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。


     cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。 

  session机制。session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 

  当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识------------称为session id,如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。


        保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。
       经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

 

Jsessionid?

  Jsessionid只是tomcat的对sessionid的叫法,其实就是sessionid;在其它的容器也许就不叫jsessionid了。

-------------------最新更新--------

 Terry_Huang  回复: 

  给你举个更生动的例子,以前大学的时候,经常去大卡司去喝奶茶,每喝一杯,都可以得到一个印花(第一次喝的时候他会给你个积分卡片),集齐6个印花之后,就可以免费获得一杯奶茶。这样子,印花的信息是保存在客户的积分卡上,你如果不怀好意的话,就自己搞几个神似的印花去骗奶茶喝吧。哈哈,这样子是不是更符合在客户端端保持状态。而拿银行卡去银行取钱,我们的卡只需要保存一个卡号,更多的信息是保存在服务器中,这样也比较符合服务器端保持状态。希望能帮到你。


http://chatgpt.dhexx.cn/article/G4E5Yy4N.shtml

相关文章

如何根据sessionID获取session解决方案

点个赞,看一看,好习惯!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了3个月总结的一线大厂Java面试总结,本人已拿腾讯等大厂offer。 另外,原创文章首发在我的个人博客&#…

sessionId的生成过程和过期时间

支持作者 最便宜的卫生纸 浏览器第一次请求服务器时,服务器会生成一个sessionId,并返回给浏览器,这个sessionId会被保存在浏览器的会话cookie中。如下图 在浏览器不关闭的情况下,之后的每次请求请求头都会携带这个sessionId到服务…

session,sessionid,cookie之间的关系解析

session,sessionid,cookie之间的关系解析 文章目录 session,sessionid,cookie之间的关系解析1.简介2.session和cookie定义,创建,周期和联系2.1cookie2.2session 3.如果禁用cookie后,如何解决账号…

dubbox拦截器配置

dubbo是一个被国内很多互联网公司广泛使用的开源分布式服务框架,即使从国际视野来看应该也是一个非常全面的SOA基础框架。作为一个重要的技术研究课题,在当当网我们根据自身的需求,为Dubbo实现了一些新的功能,并将其命名为Dubbox&…

Springboot+Dubbox 提供Rest服务实践

背景 在开发过程中,dubbo接口自测时,通过控制台的invoke方式调用dubbo服务不方便,主要体现在入参设置和入参保存上(invoke方式调用dubbo服务请参考:命令行中调用dubbo服务及入参写法_Ypc_victor的专栏-CSDN博客&#…

Dubbo2

一、基础知识 1、分布式基础理论 1.1)、什么是分布式系统? 《分布式系统原理与范型》定义: “分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统” 分布式系统(distributed system&#…

Dubbox 是什么?

1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只…

分布式服务框架 dubbo/dubbox 入门示例

http://www.cnblogs.com/Javame/p/3632473.html 1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的…

SpringBoot整合Dubbox(无XML配置)

##简介 Dubbox是当当网对阿里的Dubbo进行增强的一个分支。在使用springboot之后,我们发现很多配置并不一定要使用xml。这篇文章的目的是让你使用Dubbox时能像使用springboot的其它功能一样可以在application.properties中配置。 ##基础整合 进入https://github.co…

Dubbo进阶(十一)—— Dubbo与DubboX区别

前世今生 Dubbo源于阿里的淘宝网开源分布式服务架构,致力于提供高性能和透明化的RPC远程服务调用方案,是SOA服务化治理方案的核心框架。淘宝网将其开源之后,得到了很多的拓展和支持(比较出名的有:当当网的扩展版本dub…

[Dubbox基础]-- 文档

一、网址 官方:https://github.com/dangdangdotcom/dubbox 参考:https://www.douban.com/note/488997143/ 二、说明 1、问题:https://github.com/dangdangdotcom/dubbox/issues 2、主要: Dubbox now means Dubbo eXtensions. …

浅谈Dubbox原理

Dubbox介绍 Dubbox是一个分布式服务框架,前身是阿里旗下的开源项目Dubbo,后来阿里停止维护,当当网在Dubbo的基础上进行优化,并继续维护,为了与原来的Dubbo区分故将其改名为Dubbox,当当网在其原有的基础上实…

Dubbox 和Dubbo 为何选择

1. 前言 随着现在互联网行业的发展,越来越多的框架、中间件、容器等开源技术不断地涌现,更好地来服务于业务,解决实现业务的问题。然而面对众多的技术选择,我们要如何甄别出适合自己团队业务的技术呢?对于人来说&#…

springboot整合dubbox

简介 今天咱们来看看怎么利用Spring Boot整合Dubbox来开发去中心化的微服务。 系统环境 本文基于Jdk1.8/Maven 3.3.9/Spring Boot 1.4.2.RELEASE/Dubbo 2.8.5.SNAPSHOT(Dubbox后续开源版本)/ZooKeeper3.4.8 Zookeeper环境搭建 下载并安装启动 下载 wget http://mirrors.h…

Dubbo

协议: Dubbo是一种分布式服务框架也是一种协议,dubbo框架默认使用dubbo协议。dubbo协议是阿里巴巴自己实现的一种应用层协议,传输层还是TCP。所以Dubbo协议与HTTP、FTP,SMTP这些应用层协议是并列的概念。除了默认的Dubbo协议&…

Dubbox简单入门

dubbox是分布式框架,让我们一起来简单搭建一个小demo Dubbox简介 Dubbox 是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo ,被国内电商及互联网项目中使用,后期阿里巴巴停止了该项目的维护,当当网便在Dubbo基础上…

Dubbox简介与入门实战

前言 什么是Dubbox?Dubbox是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo,被国内电商及互联网项目中使用,后期阿里巴巴停止了Dubbo项目的维护(现Dubbo已捐献给Apache基金会),因为阿里巴巴内部的HSF框架比Dubbo…

Dubbox 环境搭建

第一章:Dubbox简介 Dubbox是一个开源的RPC(Remote ProcedureCall Protocol)远程调用框架,是由dangdang对阿里的Dubbo的升级,可以被视为Dubbo的增强版,基本架构没有变动,升级spring2.x到spring3.x,支持restful风格的调用…

Dubbox框架简介

Dubbox框架简介 Dubbox是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo,被国内电商及互联网项目中使用,后期阿里巴巴停止了该项目的维护,当当网便在Dubbo基础上进行优化,并继续维护,为了与原有的Dubb…

Dubbo的介绍以及Dubbox的区别

Dubbo官网: http://dubbo.io/ Dubbox官网: https://github.com/dangdangdotcom/dubbox Dubbo 是阿里巴巴公司开源的一个基于Java的高性能开源RPC框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。后来因为某些原…