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

article/2025/11/1 12:58:14

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

文章目录

  • session,sessionid,cookie之间的关系解析
    • 1.简介
    • 2.session和cookie定义,创建,周期和联系
      • 2.1cookie
      • 2.2session
    • 3.如果禁用cookie后,如何解决账号身份识别?
    • 4.session和cookie的关系

1.简介

网上有很多关于他们的文章,我这里以我自己的理解来写这篇文章。

session,cookie这个关系弄明白了,对你开发后端收益匪浅。

下面我将以解释他们是什么,彼此之间有什么联系,生命周期,如何使用等方面进行描述。

2.session和cookie定义,创建,周期和联系

2.1cookie

Cookie定义:有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户浏览器上的数据。浏览器为了保存用户状态的对象,该对象是服务器创建,存于浏览器。

cookie的内容:主要包括:名字,值,过期时间,路径和域。

cookie在浏览器的工作机制:cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。当客户端第一次(首次)请求服务器的时候不会携带Cookie,因为这个cookie由服务器端生成,首次还没有他。

cookie的生命周期:

  1. cookie的创建:Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie),在服务器创建cookie对象后,响应给浏览器,在响应头中的set-cookie字段中存放该cookie发给浏览器,浏览器接收后会将set-cookie中的内容放到浏览器的cookie缓存容器中。

  2. cookie的过期时间:如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。cookie.setmaxage设置为0时,会马上在浏览器上删除指定的cookie;cookie.setmaxage设置为-1时,代表关闭当前浏览器即失效。

自己对cookie的理解:cookie就是一个数据,这个数据中通常有sessionid字段信息,举例:SESSIONID=asdfghjkl,也就是cookie中数据是key=value这种格式,cookie中除了存储有sessionid,还有其他的一些信息;cookie不止一个,我用同一个浏览器访问百度打开一个网页窗口,访问谷歌打开一个网页窗口,通过f12查看cookie可以发现各自的网页的cookie是独立的,他们的内容不一样;我的理解是一个浏览器窗口有一个独立的cookie存放容器,该容器中的key就是当前访问服务器的url,value就是cookie对象集合(下图的红框部分),在这个cookie对象集合中可以看到很多条数据内容(每一条数据就是一个cookie对象,他们有自己的生命周期和作用范围),我们浏览器每次给服务器发送请求时,会加载cookie中的信息,并判断那些属性是作用在该请求范围中的,筛选出来符合条件的属性数据,并和请求一起发送给服务器。

在这里插入图片描述

为了进一步说明为什么上图红框中是一个cookie对象集合,可以在服务器端controller层写一个创建cookie对象的接口代码如下:

//创建了一个cookie,名字是"name" 值是"Gareen"Cookie c = new Cookie("name", "Gareen");//表示这个cookie可以保留一天,如果是0,表示浏览器一关闭就销毁c.setMaxAge(24 * 60 * 60);//Path表示服务器的主机名,只有浏览器通过这个主机名访问服务器的时候,才会提交这个cookie到服务端c.setPath("127.0.0.1");//将自己创建的cookie对象相应给浏览器,把该对象放到响应头中的set-cookie字段内容中然后发回给客户端,客户端会把set-cookie字段中内容放到浏览器的cookie缓存容器中,当下一次浏览器请求,就会在请求头中的cookie字段中加上这个cookie对象,后端再通过解析请求头拿到他response.addCookie(c);

在这里插入图片描述

通过上图可以发现我们创建的cookie对象在浏览器中成了一条数据,印证了我上边说的这是一个cookie对象集合,并且每个cookie对象都有属于自己的生命周期和作用范围

服务器接受到请求后,会默认去请求头中找cookie字段的属性,并将其内容解析,大概的思路如下:

服务器端获取所有浏览器传递过来的cookie,因为可能是cookie对象集合,使用集合接收

Cookie[] cookies = request.getCookies();

如果浏览器端没有任何cookie,得到的Cookie数组是null

if (null != cookies )

遍历所有的cookie

for (int d = 0; d <= cookies.length - 1; d++) {
out.print(cookies[d].getName() + “:” + cookies[d].getValue() + “
”);
}

在这里插入图片描述

2.2session

session的定义:服务器为了保存用户状态而创建的一个特殊的对象。session是存于服务器,cookie是存于浏览器

session的主要内容:Attribute对象(这个是我们自己将数据存入session的地方,比如想将当前账户信息存入session,就可以存入这里),Id,这个id就是sessionid,是服务器在创建session对象时生成的id,使用了散列表结构,所以生成的sessionid是唯一的,我们就是利用sessionid唯一这个依据来确认每次请求的账户信息。

在这里插入图片描述

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

sessionId在浏览器作用范围:新开的浏览器窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session。例如,在链接上右击,在弹出的快捷菜单中选择"在新窗口中打开"时,子窗口便可以访问父窗口的Session。

session的生命周期:

  1. session创建:Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。

  2. session的过期时间:服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为30分钟。也可调用Session的invalidate方法让其强制失效。

3.如果禁用cookie后,如何解决账号身份识别?

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

4.session和cookie的关系

本质上是一样的,都是用于保持用户状态或实现请求与请求间的数据共享的一种机制。

cookie和session都由服务器创建

Cookie存在客户端,Session存在服务器端。

以最基础的sessionid存放过程为例:

1、当客户端浏览器第一次向服务器发请求时(服务器检查请求头中有无Cookie字段),服务器会创建一个Session,而每个

Session有一个唯一的编号(sessionid)

2、服务器将session的唯一编号作为响应头中的set-cookie字段内容发回给客户端 ,而这个sessionid会先放入服务器默认创建的cookie对象中,再将cookie对象放到set-cookie字段中。

3、客户端接到响应后,将set-cookie字段的内容存到缓存中,以后每次请求,请求头中都带上cookie字段,且字段内容中包含发给

客户端的session的唯一编号 。

参考:

cookie的创建和访问_纯粹无忧的博客-CSDN博客_创建cookie

session的生命周期 - 人情世故 - 博客园


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

相关文章

dubbox拦截器配置

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

Springboot+Dubbox 提供Rest服务实践

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

Dubbo2

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

Dubbox 是什么?

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

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

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

SpringBoot整合Dubbox(无XML配置)

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

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

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

[Dubbox基础]-- 文档

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

浅谈Dubbox原理

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

Dubbox 和Dubbo 为何选择

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

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

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

Dubbox简单入门

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

Dubbox简介与入门实战

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

Dubbox 环境搭建

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

Dubbox框架简介

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

Dubbo的介绍以及Dubbox的区别

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

Dubbox学习笔记

一、Dubbox简介 1、什么是SOA架构 SOA是Service-Oriented Architecture的首字母简称&#xff0c;它是一种支持面向服务的架构样式。从服务、基于服务开发和服务的结果来看&#xff0c;面向服务是一种思考方式。其实SOA架构更多应用于互联网项目开发。 为什么互联网项目会采用…

Dubbox是什么,如何整合SpringBoot,有什么优势?

目录 一、Dubbox 是什么 二、Dubbox 如何整合SpringBoot 三、Dubbox 有什么优势 一、Dubbox 是什么 Dubbox是一款基于Java语言的分布式服务框架&#xff0c;是阿里巴巴公司开源的一款服务化治理框架&#xff0c;其前身为Dubbo。Dubbox是针对Dubbo进行了改进和升级&#xff…

dubbox简介

1.1 dubbox简介 随着互联网的发展&#xff0c;网站应用的规模不断扩大&#xff0c;常规的垂直应用架构已无法应对&#xff0c;分布式服务架构以及流动计算架构势在必行&#xff0c;亟需一个治理系统确保架构有条不紊的演进。 单一应用架构 当网站流量很小时&#xff0c;只需一…