【会话技术】Cookie和Session的工作流程和区别

news2024/11/26 21:53:06

Cookie技术

web程序是通过HTTP协议传输的,而HTTP是无状态的,即后续如果还要使用前面已经传输的数据,就还需要重传。这样如果数据量很大的情况下,效率就会大打折扣。Cookie的出现就是为了解决这个问题。

Cookie的工作流程:

客户端第一次请求时携带数据发送给服务器,服务器这边决定将哪个数据用Cookie存储,并通过响应将Cookie返回给客户端,然后客户端这边会存储在浏览器上或硬盘中。之后每次HTTP请求中自动携带这个Cookie给服务器。它位于header中的一个属性。

Cookie的特点:

数量有限,单个存储大小有限,安全性无法得到保障,浏览器可以禁用cookie。如果用户禁用cookie,则无法使用cookie。

Cookie的生存周期:

可以根据需求设置。没有设置的话默认是关闭浏览器,cookie就会删除,生命周期就会结束。

Cookie在生成时,就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为0或者负值,这样在关闭浏览器时,就会马上消除Cookie,不会记录用户的信息,更加安全。

Cookie的应用场景:

对于安全性不高的数据,数据量不大的数据存储比较合适。

cookie可以用来保存用户的登录信息。比如10天内免登陆等等。如果删除cookie下次就需要重新登陆。


Session技术

会话:用户打开一个浏览器,点击多个超链接,访问服务器多个web资源然后关闭浏览器,整个过程称之为一个会话。

Session的工作流程:

  • 当用户请求应用程序的web页面时,如果该用户还没有会话,就会为该用户创建一个会话,即创建一个Session对象,对象中会存储该用户会话所需的属性等。
  • 这样,当用户在应用程序的多个web页面进行跳转时,存储在session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
  • 会话创建成功后,服务器会向客户端发送一个sessionId,同时服务器这边也会把sessionId和对应的用户信息,用户操作记录在服务器上,客户端收到sessionId后会储存在cookie里,再次访问时就会发送这个cookie,服务器通过sessionId就知道用户是谁了。类似于去理发店剪头发,店员就会让你办一个会员卡,办了之后,理发店就会有你的一些相关信息,比如姓名,电话号码,消费记录,余额等。并且会给你一个会员卡(相当于sessionId),下次理发时拿上会员卡,理发店就知道是哪位顾客来了。

假设一个网站对应一个 webapp, 而 webapp 必然储存着大量用户的会话 Session, 存储的结构是类哈希表结构, 一个会话的Key 值是 服务器分配的 id, 即 sessionId, 这个Key对应的value(HttpSession)是这个用户的个人信息, 也是以键值对的形式组织的。

在这里插入图片描述

Session的生命周期:

可以根据需求设置。默认是30分钟。举个例子,如果设为10分钟的话,当你登录一个服务器,登陆成功的话,服务器会返回一个sessionId,登陆成功之后的10分钟内没有客户端这边进行任何HTTP请求,10分钟后你再发送一个HTTP请求,就会提示你需要重新登陆。

每次登陆的时候会重新创建会话,服务器重新返回sessionId,客户端通过请求中携带的id可以不断访问该web程序的多个界面,生命周期结束有常见的两种,用户主动点击退出登录(注销)或一段时间内没有进行操作。后面用户再次登录时就需要重新登陆,重新创建会话以及服务器返回新的sessionId。以此循环。注销就是服务器那边通过代码逻辑消除了会话对象。id也消除了。客户端这边再次请求时id就会无法匹配,就需要重新登陆。一段时间内不操作也是如此。

Session的应用场景:

判断一个用户是否是登录状态,非登录状态强制跳转到登录页面。不是所有用户都会先进入登录页面输密码,有可能他直接在地址栏里强行输入主界面或其他操作界面的URL,这个时候就会出现问题。我们可以使用Session,当用户登录的时候为他设置一个session对象,直至退出登录,该session销毁。并在每个页面里加入判断是否存在session对象,不存在就强制跳转到登录页面。

进一步想要提高安全性,可以对sessionId增加时间和空间上的显示,异地需重新登录,一段时间后需要重新登陆。

代码示例,登录时创建会话: 

        // 验证通过 进行登录 创建会话 使用该会话创建用户信息
        // true表示会话存在就查找 不存在就创建新的会话
        HttpSession session = req.getSession(true);
        // 会话保存操作  后续通过第一个参数获取到会话 
        session.setAttribute("user",user);
        // 进行重定向 跳转到主页面 重定向使得登录成功操作不能去回转
        resp.sendRedirect("mainInterface.html");

 代码示例,获取会话:

        // 使用这个方法来获取用户的状态
        // false的作用 有会话返回对象 无会话则返回null
        HttpSession session = req.getSession(false); 
        if(session == null) {
            //说明无会话 表明该用户是未登录状态
            //创建一个空的用户对象
            User user = new User();
            //将空对象的内容以json格式进行响应
            String respJson = mapper.writeValueAsString(user);
            resp.getWriter().write(respJson);
            return;
        }

        //获取会话对象
        User user = (User) session.getAttribute("user");//与上面保存会话的key值要一样


两者区别:

  • 存储位置不同

Cookie可以存储在浏览器或本地硬盘上,Session只能存储在服务器上。

  • 安全性不同

Session比Cookie更安全。

  • 对服务器的压力不同

Session占用服务器资源和性能,Session过多,会增加服务器压力。

  • 存储大小不同

Cookie在浏览器这边存储,浏览器对cookie的存储有限制,个数一般不超过20个,单个Cookie存储的数据不超过4k。Session没有大小限制,它与服务器的内存大小有关。

  • 存储对象不同

Session能存储任意类型的Java对象(类似于哈希表结构存储),Cookie只能存储String类型的对象。(以键值对结构存储)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1186227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TDD、BDD、ATDD以及SBE的概念和区别

在软件开发或是软件测试中会遇到以下这些词:TDD 、BDD 、ATDD以及SBE,这些词代表什么意思呢? 它们之间有什么关系吗? TDD 、BDD 、ATDD以及SBE的基本概念 TDD:(Test Driven Development)是一种…

Linux中固定ip端口和修改ip地址

一,更改虚拟网络编辑器 1,首先启动VMware,选择自己要更改ip或固定ip的虚拟机,并找到虚拟网络配编辑器,点击进入 2,进入之后需要点击右下角获取管理员权限后才能修改,有管理员权限之后图片如下 …

影响金融软件开发价格的因素有哪些?

随着科技的发展,金融行业逐渐向数字化和信息化转型,在这个过程中,金融软件开发成为了重要的支撑,然而,金融软件开发的价格是一个复杂的问题,受到多种因素的影响,本文将详细解析影响金融软件开发…

HiSilicon352 android9.0 适配红外遥控器

海思Android解决方案在原生Android基础上,基于传统电视用户使用习惯,增加了对红外遥控器和按键板的支持,使传统电视用户能更好适应智能电视方案。 一.功能描述: 在系统启动时,会先启动android_ir_user;vinp…

程序员可以做哪些副业?我整理的千字副业指南。

都说不想做副业的程序员不是好程序员,尤其是在经济形势不好的现在,有一份靠谱和稳定的副业更是成为了程序员的不二之选。程序员的副业是细水长流型的,虽然收入未必能超过主业,但胜在每月稳定入账,可以作为小金库和备用…

基于STC12C5A60S2系列1T 8051单片机SPI通信应用

基于STC12C5A60S2系列1T 8051单片机SPI通信应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍STC12C5A60S2系列1T 8051单片机SPI通信介绍STC12C5A60S2系列1T 8051单片…

java中post请求可以像get请求一样拼装参数吗?

可以的,代码实例如下所示: 控制器如下所示: PostMapping(value "/mkdirDirectory") public Object mkdirDirectory(RequestParam("path") String path) {log.info("本地生成文件夹路径:{}", path);Object i…

C++(Qt)软件调试---自动注册AeDebug(17)

C(Qt)软件调试—自动注册AeDebug(17) 文章目录 C(Qt)软件调试---自动注册AeDebug(17)1、什么是AeDebug2、使用调试工具3、WinDbg注册到AeDebug4、ProcDump注册到AeDebug5、Dr.MinGW注册到AeDebug6、Visual Studio 注册到AeDebug 1…

【ARM Coresight OpenOCD 系列 1 -- OpenOCD 介绍】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 1.1 OpenOCD 介绍1.1.1 OpenOCD 支持的JTAG 适配器1.1.2 OpenOCD 支持的调试设备1.1.3 OpenOCD 支持的 Flash 驱动 1.2 OpenOCD 安装与使用1.2.1 OpenOCD 代码获取及安装1.2.2 OpenOCD 使用1.2.3 OpenOCD 启用 GDB…

修改a-rate评分颜色;a-rate评分十分制

使用ant-design-vue的rate评分组件 1。修改颜色 2。十分制&#xff08;默认是5分&#xff0c;改成10分。且提示也是10分制&#xff09; <a-rate v-model"score" :tooltips"rate10" allow-half hoverChange"changeRate" />data() {score: …

和xshell和crt说再见,认识了一款51k star多端跨平台终端神器,强大酷炫

一、Tabby简介 Tabby&#xff08;以前称为Terminus&#xff09;是一款高度可配置的终端仿真器、SSH 和串行客户端。开源且跨平台&#xff0c;支持在Windows、macOS和Linux系统下使用。 源码下载 https://github.com/Bill13579/tabby官网地址 https://tabby.sh/1. 特点 集成…

子查询:内查询,嵌套查询

括号里面的查询语句会先于主查询语句 create table info ( id int, name varchar(10) primary key not null, score decimal(5,2), address varchar(20), hobbid int(5) );select name,score from info where name in (select name from info where score > 80); 子查询返回…

【uniapp】通用列表封装组件

uniapp页面一般都会有像以下的列表页面&#xff0c;封装通用组件&#xff0c;提高开发效率&#xff1b; &#xff08;基于uView前端框架&#xff09; 首先&#xff0c;通过设计图来分析一下页面展示和数据结构定义 w-table组件参数说明 参数说明类型可选值默认值toggle列表是…

栈的应用:括号匹配,递归

目录 1.栈的应用1.括号匹配问题算法实现 2. 递归栈在递归中的应用 3.队列的应用 1.栈的应用 1.括号匹配问题 ①可用栈实现该特性&#xff1a;最后出现的左括号最先被匹配&#xff08;LIFO)。 ②出栈&#xff1a;每出现一个右括号&#xff0c;就“消耗”一个左括号。 ③匹配失败…

如何将 ONLYOFFICE 文档 7.5 与 Odoo 进行集成

在本教程中&#xff0c;我们将了解如何使用集成应用实现 ONLYOFFICE 文档与 Odoo 之间的连接。 ONLYOFFICE 文档是什么 ONLYOFFICE 文档是一款全面的在线办公工具&#xff0c;提供了文本文档、电子表格和演示文稿的查看和编辑功能。它高度兼容微软 Office 格式&#xff0c;包括…

Unity UGUI之Button控件的简单认识

Unity通过菜单或者Hierarchy面板创建Button,将会自动创建一个Image和Button控件&#xff0c;并且Transition属性默认选择Color Tint模式&#xff0c;除此之外还创建了个文本子对象。如下图所示&#xff1a; 而使用Inspector面板中Add Component只会创建Button控件。Transition属…

听说,工作能力强的项目经理都有这几个特征

大家好&#xff0c;我是老原。 很多项目经理每天忙忙碌碌&#xff0c;但是一看结果&#xff0c;团队业绩没有完成、人才没有培养起来、自己的管理水平和个人领导力也没有得到提升。 明明付出了很多时间和精力&#xff0c;结果却只收获了团队的抱怨&#xff0c;以及老板对你管…

UnoCss(原子化css引擎) 让你的开发更轻松愉快

什么是原子化CSS&#xff0c;UnoCSS又是什么&#xff0c;对此有疑问的推荐看下antfu的这篇文章——重新构想原子化 CSS (antfu.me) 相信看完这篇文章的你也会跟我一样热衷于UnoCSS. 介绍 今天介绍一个CSS开发利器 UnoCSS , 是一个具有高性能且极具灵活性的即时原子化 CSS 引擎…

web框架与Django

web应用程序 什么是web Web应用程序是一种可以通过Web访问的应用程序&#xff0c;程序的最大好处是用户很容易访问应用程序&#xff0c;用户只需要有浏览器即可&#xff0c;不需要再安装其他软件 应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序&#xff0c;也就是说这…

ubuntu 18.04安装自己ko驱动 修改secure boot

因为本人老折腾自己的电脑&#xff0c;所以老重装系统&#xff0c;然后配置又不见了&#xff0c;这次配置赶紧记下来 insmod netlink_test.ko 报错&#xff1a;insmod: ERROR: could not insert module netlink_test.ko: Operation not permitted 添加 sudo insmod netlink_te…