用户登录问题——登录态

不论在任何系统中,用户体系都是重中之重,而怎么建立一个完善的,安全的用户体系,是所有开发者都在思考的问题。

而这里就来思考一下,用户登录问题。

登录的作用主要就是用户认证,与权限认证,也就是常说的认证与授权;首先我们要明白认证与授权是两个东西,并不是一回事。

所谓的认证解决的是你是谁,而授权解决的是你能做什么,也就是权限。

http协议是一种无状态协议,所以才需要用户登录,只有这样后端服务才知道当前是谁在操作,又操作了什么东西。就拿买东西来说,用户不登录,系统怎么知道是谁在买东西,买的东西应该谁付钱,然后东西又该发给谁。

用户体系中,认证与授权是无法避免的两个东西,而认证是通过注册与登录实现的。

拿学校来举例,所谓的注册就是开学第一天,你去学校报名,告诉学校的工作人员,你是谁,你的电话,身份证,家庭住址等。对应到系统中,就是你输入手机号或身份证号又或者是用户名和密码,然后创建一个用户的过程。

而登录就是你入学之后,你出校之后再回来要进学校的大门,这时你就要学校给你的大门钥匙(就是用户名和密码),这样你才能打开门进入学校。

但是呢,你进门的时候每次都可以用钥匙开门,但对软件系统来说,用户每访问一个页面或调用一次接口都要重新输入一下用户名和密码,这对用户来说是不可接受的。

所以,服务器端就会维护一个标识,来标志你的存在,这个标识就是session,服务器端会给你一个字符串,也就是sessionId,这样你下次在进来的时候,只需要告诉服务器你的sessionId就行了。这样就不用每次都输入用户名和密码。

所以,在http这种无状态协议下,用户注册登录就是为了维护一个唯一的标识,来证明你的存在。

学校维护了你的信息(你的姓名,电话,身份证等),然后给你一个学号,你每次离开学校再回来的时候,只需要告诉保安,你的学号,保安然后查看一下是否有这个学号,就可以决定是否放你进校门。

但是呢,出于安全考虑,你的学号是有时间限制的,等过了这个时间就要重新给你分配一个学号。因为,你的学号使用等时间长了之后,可能会被别人知道,这样别人也可以通过报你的学号进入学校,所以就会造成安全问题。解决办法就是每隔一段时间(一次会话),更换一次学号,也就是每次登录都会有新的sessionId。

而从浏览器等角度来说,这个学号,也就是sessionId就保存在cookie中。这也是我们常说的cookie + session的认证方式。但cookie + session但认证方式有很多问题,比如跨域问题,安全性问题,因为cookie可以被轻易得到。

所以就有了一种新的方式,那就是令牌——token认证。

所谓的token令牌,就类似于学生的校园卡,只要你有这个校园卡,那么你就可以进入学校。

其好处就是这个校园卡里可以存放更多的信息,还有就是平台无关性。后端服务只需要根据你的信息生成一个唯一的令牌token即可。

虽然,现在token认证是目前业界普通的方式,但其也不是绝对安全的,比如你的校园卡丢了,被别人捡到了;或者别人按照你的校园卡,伪造了一张等。

所以说,用户登录安全就是要保证用户端那个能够证明自己身份的东西的安全,不论是sessionId,还是token令牌。而且,token也可以放到cookie中进行认证。

怎么保证token的安全性?

比如,设置token的过期时间,每隔一段时间token就会失效,然后生成新的token。又或者,使用加密算法,对用户信息进行加密,增加别人伪造的难度

登录的本质,就是拿到一个唯一标识,后端能够通过这个唯一标识认出你是谁。

总而言之,没有绝对安全的系统,也没有绝对安全的用户体系,我们只能尽最大的努力来防范安全问题;

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

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

相关文章

云原生周刊:CNCF 宣布 Falco 毕业|2024.3.4

开源项目推荐 ldap-operator 用于部署和管理 LDAP 目录的 Kubernetes Operator。 Updatecli Updatecli 是一个用于应用文件更新策略的工具。每个应用程序“运行”时都设计为可在任何地方使用,它会检测是否需要使用自定义策略更新值,然后根据该策略应…

UOS 与 Ubuntu 命令行打开安装包界面,双击打开界面调用安装包界面展示

UOS 使用deepin-deb-installer安装程序 deepin-deb-installer xxxxxxx.deb & Ubuntu snap-store --local-filename /home/seven/wps-office_1xxxxxxx.deb &

ubuntu20.04安装ros并配置相关环境以及驱动AUBO i5机械臂

ubuntu20.04安装ros并配置相关环境以及驱动AUBO i5机械臂 安装ros安装rosdep(小鱼的rosdepc,又快又好用)环境配置下载并编译aubo roslib库环境变量配置aubo gazeboaubo rviz驱动真实机械臂 安装ros 搜索鱼香ros网站https://fishros.com/,根据一键安装ros里提供的指…

【数据结构】二、线性表:1.顺序表的定义与实现(静态分配、动态分配)

文章目录 线性表linear list基本操作1.顺序表1.1静态分配1.2动态分配 线性表linear list 线性表是具有相同数据类型的n (n≥0)个数据元素的有限序列,其中n为表长,当n0时线性表是一个空表。 若用L命名线性表,则其一般表示为&#…

自动填充MyBatis-Plus日志中的sql语句参数小工具

写在前面:大家好!我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油,冲鸭&#x…

Chromium内核浏览器编译记(四)Linux版本CEF编译

转载请注明出处:https://blog.csdn.net/kong_gu_you_lan/article/details/136508294 本文出自 容华谢后的博客 0.写在前面 本篇文章是用来记录编译Linux版本CEF的步骤和踩过的坑,以防止后续再用到的时候忘记,同时也希望能够帮助到遇到同样问…

Crow 编译和环境搭建

Crow与其说是编译,倒不如说是环境搭建。Crow只需要包含头文件,所以不用编译生成lib。 Crow环境搭建 boost(可以不编译boost,只需要boost头文件即可)asio (可以不编译,直接包含头文件。不能直接…

【Linux】软件管理器yum和编辑器vim

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 一、Linux下安装软件的方案1.1 源代码安装1.2 rpm安装1.3 yum安装 二、Linux软件…

Spring Boot 配置热部署

前言 对于 Spring Boot 项目之中, 在刚开始学习的时候, 每当代码进行变动的时候, 想要生效那就必须要手动重启. 为什么要重启呢 ? 原因在于写的代码是依靠运行之后的 class 文件运行的, 当我们的代码更新以后, 如果不去手动重启, 那么就无法生成新的 class 文件, 执行的就是旧…

C#关键字学习

前言 记录C#编程中用到的关键字,对关键字的用途进行解释、记录、学习。会持续更新。 1. volatile 在C#中,volatile关键字用于声明一个字段(通常是一个共享的字段)是易变的,即每次访问该字段时,都要从内存…

蓝桥杯物联网竞赛_STM32L071_11_知识体系的查漏与补缺

太久没学单片机了,再重新过一遍查漏补缺,对其中之前没怎么在意的,而现在又发觉的问题进行再分析与补充 1. debug serial wire是干什么用的 这个东西我勾选不勾选都对我的程序没有什么影响,我很好奇是干什么用的,网上查…

vue3+elementPlus:el-table-column表格列动态设置单元格颜色

:cell-style属性 //html<el-tableempty-text"暂无数据":data"datalist.table":max-height"height"row-key"id"border:cell-style"cellStyle"> <el-table>//js //动态设置单元格颜色 const cellStyle ({ row, c…

Java后台面试相关知识点解析

文章目录 JavaJava中四种引用类型及使用场景集合HashMap源码及扩容策略HashMap死循环问题ConcurrentHashMap与HashtableConCurrentHashMap 1.8 相比 1.7 判断单链表是否有环&#xff0c;并且找出环的入口IO线程池线程池的几种创建方式判断线程是否可以回收线程池的7大核心参数线…

Golang 常用的时间转换

1、获取 Y-m-d H:i:s 格式的当前时间 t : time.Now().Format(time.DateTime) 2、获取当前时间戳 currentTime : time.Now() timestamp : currentTime.Unix() // 获取秒级时间戳 3、Y-m-d H:i:s 格式转时间戳 timeStr : "2023-09-01 12:00:00" t, err : time.Par…

matlab 仿真IIR低通滤波器,显示滤波前后的波形和频谱

figure fs500;%采样率 f130;%信号频率 f270;%信号频率 f3 100;%信号频率 f4 150;%信号频率 T2;%时宽2s nround(T*fs);%采样点个数 tlinspace(0,T,n);%时域横坐标 x sin(2*pi*f1*t) sin(2*pi*f2*t) sin(2*pi*f3*t) 2*cos(2*pi*f4*t); subplot(221); plot(t,x);%画时域图 xl…

【MySQL】lower_case_table_names作用及使用

知识点&#xff1a; lower_case_table_names 是mysql设置大小写是否敏感的一个参数。 场景&#xff1a;在使用dataease时&#xff0c;连接外部数据库&#xff0c;启动报错&#xff01;后查看官方文档&#xff0c;特别要求改数据库配置文件&#xff1a;lower_case_table_names …

Mybatis从入门到CRUD到分页到日志到Lombok到动态SQL再到缓存

Mybatis 入门 1.导入maven依赖 <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>x.x.x</version> </dependency>2.配置核心文件 <?xml version"1.0" encoding"U…

【MySQL知识体系】第1章 初始 MySQL

文章目录 第1章 初始 MySQL1.1 MySQL 介绍1.1.1 什么是 MySQL&#xff1f;1.1.2 MySQL 的特点&#xff1f;1.1.3 MySQL 默认端口&#xff1f; 1.2 安装 MySQL1.2.1在MacOS上安装MySQL1.2.2 在Windows上安装MySQL 1.3 如何选择 MySQL 客户端1.3.1 在MacOS上安装Workbench1.3.2 在…

【吊打面试官系列】Java虚拟机JVM篇 - 三道最简单最常问的JVM面试题

大家好&#xff0c;我是锋哥。今天分享三道最简单最常问的JVM面试题&#xff0c;希望对大家有帮助&#xff1b; 一&#xff0c;请问JDK与JVM有什么区别&#xff1f; 简单来说&#xff1a; 1. JVMJava 运行器&#xff1b; 2. JREJVM Java 基础&核心类库&#xff1b; 3. JD…

【贪心算法】专题练习二

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;【LeetCode】winter vacation training 目录 &#x1f449;&#x1f3fb;买卖股票的最佳时机&#x1f449;&…