当前位置: 首页 > news >正文

Session会话管理

会话管理

  • Web会话管理概述
  • 常见的Web应用会话管理方式
    • 基于Server端的Session的管理方式
    • 基于Cookie的Session的管理方式
      • Cookie与Session最大的区别
      • Cookie-Based的管理方式
    • 基于Token-Based的管理方式
  • Web会话管理的安全问题

Web会话管理概述

  • 会话管理:在进行人机交互的时候,会话管理总是保持用户的整个会话活动的互助与计算机系统的跟踪过程。会话管理又分为:桌面会话管理、浏览器会话管理、Web服务器的会话管理。
  • 为什么要有会话管理:HTTP是一种无状态的协议,一次请求结束之后,客户端与服务端的链接就会断开,服务器再次收到请求时,无法识别这次请求是哪个用户发过来的,要重新建立连接。为了判断发送请求的用户,需要一种记录用户的方式,也就是Web会话管理。

常见的Web应用会话管理方式

  • 基于Server端的session的管理方式
  • cookie-based的管理方式
  • token-based的管理方式

基于Server端的Session的管理方式

在早期的Web应用之中,通常使用服务端session来管理用户的会话。
服务端session是用户第一次访问应用时,服务器就会创建的对象,代表用户的一次会话过程,可以用来存放数据。服务器为每一个session都分配一个唯一的session ID,以保证每个用户都有一个不同的session对象。
服务器在创建完session之后,会把session ID通过cookie返回给用户所在的浏览器,这样当用户第二次或者以后向服务器发送请求时,就会通过cookie把session ID传给服务器,以便服务器能根据session ID找到与该用户对应的session对象。
session通常设定有效时间,比如一个小时。当时间失效之后,服务器就会销毁之前的session,并且创建新的session用户。但如果在失效时间之内,有发送新的请求给服务器,服务器就会刷新对应的session有效时间。
session在一开始并不具备会话管理功能,只有在用户登录认证成功之后,并且往session对象里面放入了用户登陆成功的凭证,才能用来管理会话。管理会话的原理也很简单,拿到了用户的session对象之后,看其中有没有登录成功的凭证,就能判断这个用户是否已经登录。当用户主动退出的时候,会把它session对象里面的登录凭证清除掉。所以在用户登陆前或者退出后,或者session对象失效之后,肯定都是拿不到需要的登录凭证的。
优点:

  1. 某些地方使用可以简化Web开发:如果在诸多Web页面间传递一个变量,那么用session变量要比通过QueryString传递变量可使问题简化。
  2. 安全性好︰客户端与服务端保持会诂状态的保介始终只定一1es非过rKPE式要这个串够随机,攻击者就不能轻易冒充他人的session lD进行操作;除非通过CSRF或http劫持的方式,才有可能冒充别人进行操作;即使冒充成功,也必须被冒充的用户session里面包含有效的登录凭证才行。
    缺点:
  3. 这种方式将会话信息存储在Web服务器里面,当用户同时在线量比较多时,这些会话信息会占据比较多的内存;
  4. 当应用采用集群部署的时候,会遇到多台web服务器之间如何做session共享的问题。
  5. 多个应用要共享session时,还会遇到跨域问题。不同的应用可能部署的主机不一样,需要在各个应用做好cookie跨域的处理。
    接下来进行验证:
    在这里插入图片描述
    请添加图片描述
    请添加图片描述
    登录成功之后会在tmp文件夹中放置一个sess开头的文件,里面有登陆成功的凭证。

基于Cookie的Session的管理方式

session的管理方式会增加服务器的负担和架构的复杂性,所以后来就提出把用户的登录凭证直接存到客户端的方案,当用户登录成功之后,把登录凭证写到cookie里面,并给cookie设置有效期,后续请求直接验证存有登录凭证的cookie是否存在以及凭证是否有效,即可判断用户的登录状态。

Cookie与Session最大的区别

Cookie将数据存储在客户端;Session将数据存放在服务端。

Cookie-Based的管理方式

用户发起登录请求,服务端根据传入的用户密码之类的身份信息验证用户是否满足登录条件,如果满足,就根据用户信息创建一个登录凭证,这个登录凭证简单来说就是一个对象,最简单的形式可以只包含用户id、凭证创建时间和过期时间三个值。
服务端把上一步创建好的登录凭证,先对它做数字签名,然后再用对称加密算法做加密处理,将签名、加密后的字串,写入cookie。cookie的名字必须固定(如ticket),因为后面再获取的时候,还得根据这个名字来获取cookie值。这一步添加数字签名的目的是防止登录凭证里的信息被篡改,因为一旦信息被篡改,那么下一步做签名验证的时候肯定会失败。做加密的目的,是防止cookie被别人截取的时候,无法轻易读到其中的用户信息。
用户登录后发起后续请求,服务端根据上一步存登录凭证的cookie名字,获取到相关的cookie值。然后先做解密处理,再做数字签名的认证,如果这两步都失败,说明这个登录凭证非法;如果这两步成功,接着就可以拿到原始存入的登录凭证了。然后用这个凭证的过期时间和当前时间做对比,判断凭证是否过期,如果过期,就需要用户再重新登录;如果未过期,则允许请求继续。
优点:

  1. 实现了服务端的无状态化(最大的优点),服务端只需要负责创建和验证登录cookie即可,无需保持用户的状态信息。
  2. cookie可以跨越同域名下的的多个网页,但不能跨越多个域名使用
  3. 可以设置有效期限,控制cookie的生命周期,使之不会永远有效(攻击者可能拿到的是过期的cookie)

缺点:

  1. cookie有大小限制,存储不了太多数据。
  2. 每次传送cookie,增加了请求的数量,对访问性能也有影响。3、同样存在跨域问题(不同域名无法互相读取cookie)

基于Token-Based的管理方式

Session和Cookie两种会话管理方式由于都要用到Cookie,不适合用在nativeapp里面,因为native app不是浏览器,不好管理Cookie,因此都不适合做纯API服务的登录认证。要实现API服务的登录认证,就需要用到token-based的会话管理方式。
token-based的管理方式从流程上和实现上跟cookie-based的管理方式没有太多区别,只不过cookie-based的管理方式中写到cookie里面的ticket在这种方式下称为token,这个token在返回给客户端之后,后续请求都必须通过url参数或者是httpheader的形式,主动带上token,这样服务端接收到请求之后就能直接从http header或者url里面取到token进行验证。
优点:

  1. 支持跨域访问:Cookie是不支持跨域访问的,Token支持
  2. 无状态:Token无状态,Session有状态(有状态和无状态最大的区别就是搬铐端会不会保存客户端的信息)
  3. 支持移动设备:Token更适用于移动应用,Cookie不支持手机端访问

缺点:

  1. 占带宽:正常情况下Token要比session lD更大,需要消耗更多的流量,挤占更多带宽
  2. 无法在服务端注销,很难解决劫持问题

Web会话管理的安全问题

在Web应用里,会话管理的安全性始终是最重要的安全问题,对用户的影响极大。从会话管理凭证来说,Session会话管理的会话凭证仅仅是一个session lD,所以只要这个session lD足够随机,那么攻击者就不会轻易地冒充别人的session lD进行操作;Cookie会话管理的凭证(ticket)以及Token会话管理凭证(token)都是一个在服务端做了数字签名和加密处理的串,所以只要密钥不泄露,攻击者也无法轻易拿到这个串中有效信息并对它进行篡改。总之,这三种会话管理方式的凭证本身是比较安全的。
从客户端和服务端的HTTP过程来说,当攻击者截获到客户端请求中的会话凭证,就能拿这个凭证冒充原用户,做一些非法操作,而服务器也认不出来。这种安全问题,可以简单采用HTTPS来解决,虽然可能还有HTTP劫持这种更高程度的威胁存在,但是从代码能做的防范,确实也就是这个层次了。

相关文章:

Session会话管理

会话管理Web会话管理概述常见的Web应用会话管理方式基于Server端的Session的管理方式基于Cookie的Session的管理方式Cookie与Session最大的区别Cookie-Based的管理方式基于Token-Based的管理方式Web会话管理的安全问题Web会话管理概述 会话管理:在进行人机交互的时…...

极智开发 | ubuntu源码编译cuda版opencv

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文介绍一下 ubuntu源码编译cuda版opencv。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq 如果你需要源码编译cpu版的opencv可以…...

umi学习(umi4)

umi 官方文档 官方建议使用 pnpm node版本在 14 以上 创建项目: 根据 包管理工具不同 ,官方推荐 这里使用 pnpm: 1. pnpm dlx create-umilatest 2. 选择模板 (这里使用 Simple App) 想对module处理需要使用 Ant Desig…...

EasyPoi的excel模板预览与下载、导出简单/复杂数据

官方文档地址:easypoi官网,官方仅供参考,部分描述有问题 excel模板预览 准备工作 事先将整理好的excel模板存在项目中,如图 excel模板预览代码 GetMapping("excel")ApiOperation("excel预览")NoLogpubli…...

收个滴滴Offer:从小伙三面经历,看看需要学点啥?

说在前面 在尼恩的(50)读者社群中,经常有小伙伴,需要面试大厂。 后续结合一些大厂的面试真题,给大家梳理一下学习路径,看看大家需要学点啥? 这里也一并把题目以及参考答案,收入咱…...

Spark Shuffle解析

1 Shuffle的核心要点 1.1 ShuffleMapStage与ResultStage ShuffleMapStage与ResultStage 在划分stage时,最后一个stage称为finalStage,它本质上是一个ResultStage对象,前面的所有stage被称为ShuffleMapStage。 ShuffleMapStage的结束伴随着…...

Qt 解决程序全屏运行弹窗引发任务栏显示

文章目录摘要在VM虚拟机器中测试setWindowFlags()关键字: Qt、 Qt::WindowStayOnTopHint、 setWindowFlags、 Qt::Window、 Qt::Tool摘要 今天眼看项目就要交付了,结果在测试程序的时候,发现在程序全品情况下,点击输入框&#x…...

【进阶】2、搭建K8s集群【v1.23】

[toc] 一、安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多集群中所有机器之间网络…...

11面向接口编程(下):一切皆服务,服务基于协议

服务容器的实现 一个服务容器主要的功能是:为服务提供注册绑定、提供获取服务实例,所以服务容器至少有两个方法:注册方法 Bind、获取实例方法 Make。 对于注册的方法,直接将一个服务提供者注册到容器中,参数是之前定…...

不要以没时间来说测试用例写不好

工作当中,总会有人为自己的测试用例写得不够好去找各种理由,时间不够是我印象当中涉及到最多的,也是最反感。想写好测试用例,前提是测试分析和需求拆解做的足够好,通过xmind或者UML图把需求和开发设计提供的产品信息提炼出来。 我个人的提炼标准一般是&…...

day57-day58【代码随想录】二刷数组

文章目录前言一、螺旋矩阵||(力扣59)二、螺旋矩阵(力扣54)三、顺时针打印矩阵(剑指 Offer29)四、在排序数组中查找元素的第一个和最后一个位置(力扣34)【二分查找】五、有多少小于当…...

【NLP】自动化计算文本文件TTR的bash脚本

自动化计算文本文件TTR的bash脚本 简介 这是一个可以计算文本文件TTR的bash脚本,文件名为:calculate_TTR.sh。它会接收一个文件名作为参数,并输出总单词数、特异单词数和TTR。 TTR是什么 TTR(Type-Token Ratio)是用…...

蓝桥杯单片机组省赛十二届第一场(关于矩阵,温度ds18b20,时间ds1302的学习,以及继电器等外设的综合利用)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、该题目如下二、使用步骤1.矩阵键盘实现2.温度传感器ds18b20的实现总结提示:以下是本篇文章正文内容,下面案例可供参考 一、该题目如下 分…...

Ubuntu 新人上手 Microk8s 指南

文章目录1. 什么是 Ubuntu 核心2. 什么是 Kubernetes3. 什么是MicroK8s4. 为什么选择 Microk8s on Core5. 安装Ubuntu Core6. Ubuntu Core上安装 MicroK8S7. 启动 Microk8s8. 启用必要的 MicroK8s 插件9. 部署示例容器工作负载10. 检查部署状态并访问您的应用程序11. 管理镜像1…...

初阶C语言——实用调试技巧【详解】

文章目录1. 什么是bug?2. 调试是什么?有多重要?2.1 调试是什么?2.2 调试的基本步骤2.3 Debug和Release的介绍3.学会使用快捷键4.调试的时候查看程序当前信息4.1 查看临时变量的值4.2 查看内存信息4.3 查看调用堆栈4.4 查看汇编信息…...

Android 绘图基础:Canvas画布——自定义View基础(绘制表盘、矩形、圆形、弧、渐变)

Canvas画布,通过它我们可以自定义一个View,设置View的相关效果之类的。感觉用法差不多,重要的是要理解方法中传入的参数的含义,比如float类型的参数,传递的是坐标,已开是没有注意传入的参数时坐标,导致我迷…...

js拷贝数组对象:浅拷贝深拷贝

前言 js拷贝数组对象:浅拷贝&深拷贝,包括:Object.assign、concat、slice、JSON.parse(JSON.stringify()) 场景:弹窗选择组织结构(树形结构),选择后显示相关数据至输入框中(每次选…...

【C++】string类的使用

目录 一、标准库中的string类 二、string类的常用接口 1、string类对象的常见构造 2、string类对象的容量操作 2.1、size 与 length 2.2、capacity 与 reserve 2.3、resize 2.4、总结 3、string类对象的访问及遍历操作 3.1、operator[] 与 at 3.2、begin end 3.3、…...

微服务架构简介

微服务 软件架构是一个包含各种组织的系统组织,这些组件包括 Web服务器, 应用服务器, 数据库,存储, 通讯层), 它们彼此或和环境存在关系。系统架构的目标是解决利益相关者的关注点。 image Conway’s law: Organizations which design systems[...] are constrained…...

【Spring源码】AOP的开端:核心对象创建的准备工作

AOP的核心成员是如何被被加载的?本篇我们主要分析使用xml的逻辑,如果使用注解,增加注解处理类即可(ConfigurationClassPostProcessor)拿之前分析循环的时候举的例子🌰,它的日志切面就是通过xml进…...

新号涨粉22w,搞笑博主再次爆火,小红书近期创作趋势是什么?

2月借势元宵、情人节,小红书平台又涌现出哪些黑马博主?品牌在投放种草方面有何亮眼表现?为洞察小红书平台的内容创作趋势及品牌营销策略,新红推出2月月度榜单,从创作者及品牌两方面入手,解析月榜数据&#…...

【C++】30h速成C++从入门到精通(内存管理、函数/类模板)

C内存分布我们先来看一下下面的一段代码相关问题int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] {1, 2, 3, 4};char char2[] "abcd";char* pChar3 "abcd";int* ptr1 (int*)mal…...

自动驾驶决策概况

文章目录1. 第一章行为决策在自动驾驶系统架构中的位置2. 行为决策算法的种类2.1 基于规则的决策算法2.1.1 决策树2.1.2 有限状态机(FSM)2.1.3 基于本体论(Ontologies-based)2.2 基于统计的决策算法2.2.1 贝叶斯网络(B…...

金山轻维表项目进展自动通知

项目经理作为项目全局把控者,经常要和时间“赛跑”。需要实时了解到目前进展如何,跟进人是那些?哪些事项还未完成?项目整体会不会逾期?特别是在一些大型公司中,优秀的项目经理已经学会使用金山轻维表做项目…...

基于上下文分析的 Python 实时 API 推荐

原文来自微信公众号“编程语言Lab”:基于上下文分析的 Python 实时 API 推荐 搜索关注 “编程语言Lab”公众号(HW-PLLab)获取更多技术内容! 欢迎加入 编程语言社区 SIG-程序分析 参与交流讨论(加入方式:添加…...

软件测试-接口测试-代码实现接口测试

文章目录 1.request1.1 request介绍1.2 发送get请求1.3 发送set请求1.4 其他请求方式1.5 传递url参数1.6 响应内容解析1.7 cookie1.8 设置session2.集成UnitTest2.1 接口测试框架开发2.2 案例:使用TPShop项目完成对登录功能的接口测试1.request 1.1 request介绍 概念 基于py…...

中村成洋《垃圾回收的算法与实现》PDF 读书笔记

观前提醒 为了能够锻炼自己,我会查阅大量外文不停的修改内容,少部分会提示成中文。 可能有误,请见谅 提示:若是觉得阅读困难,可以看如下内容 脚本之家可获取,若失效可私信浏览器的沙拉查词扩展&#xf…...

docker 网络模式

docker 网络模式主要分为四种,可以通过docker network ls 查看 ~$ docker network ls NETWORK ID NAME DRIVER SCOPE a51d97d72f10 bridge br…...

数据库开发(一文概括mysql基本知识)

Mysql 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 关系型数据库(Relational Database Management System:关系数据库管理系统)应用软件之一。mysql在问开发中,几乎必不可少,因为其他的可能是要收费的&#x…...

【JVM】详解Java内存区域和分配

这里写目录标题一、前言二、运行时数据分区2.1程序计数器(PC)2.2 Java虚拟机栈2.3 本地方法栈2.4 Java堆2.5 方法区2.5.1 运行时常量池2.6 直接内存三、HotSpot虚拟机对象探秘3.1 对象的创建3.2 对象的内存布局3.3 对象的访问定位一、前言 C/C需要自行回收和释放已经没用的对象…...

郑州哪个网站建设最好/怀化网站seo

2019独角兽企业重金招聘Python工程师标准>>> 常用配置片段如下: gzip on; gzip_comp_level 2; # 压缩比例,比例越大,压缩时间越长。默认是1 gzip_types text/css text/javascript; # …...

怀远建设局门户网站/今日头条最新版

单例模式通常用于保证系统中一个类只有一个单例。 单例模式分为三种:懒汉式、饿汉式、双重锁模式 例1:懒汉式(会产生线程安全问题,需要使用synchronized关键字进行加锁,只有在使用单例模式的时候,实例对象才会被创建) …...

网站的建设原始代码/重庆网站建设外包

一、 ng-class ng-class 指令用于给 HTML 元素动态绑定一个或多个 CSS 类。 ng-class 指令的值可以是字符串,对象,或一个数组。 如果是字符串,多个类名使用空格分隔。如果是对象,需要使用 key-value 对,key 为你想要添…...

wordpress 媒体管理/中国seo排行榜

目录 0函数对象 实际应用介绍 函数对象超出了普通函数概念,内部可以保持状态 函数对象作为参数传递 1谓词 一元谓词举例: 二元谓词举例: 2内建函数 0函数对象 重载函数调用操作符的类,其对象常被称为函数对象&#xff08…...

电子商务网站建设收获/湖南网站建设工作室

原文网址:http://blog.sina.com.cn/s/blog_5bdee3020101pvgy.html 市面上,经常充斥着,大量双卡双待手机,而许多消费者只是知道这种手机可以插入两个卡,直接打电话,而你真正的理解其中的含义吗? …...

一个数据库怎么做二个网站/百度收录技术

今天终于考完了70-528,长长舒口气 呵呵,可以安安心心的回国度假了。这次考试真是一波三折啊。下面先说说考试过程 一个月前开始准备考MCTS,但是当时只是似懂非懂这个东西,一直都觉得可有可无,所以当时也没有太放在心上。天天70-536的Training…...