Token是什么_token什么东西-程序员宅基地

技术标签: Token  

对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不知道为什么要用它?更不知道其原理,今天我就带大家一起分析分析这东西。

    一、我们先解释一下他的含义:

    1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。

    2、Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

    3、使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

    了解了Token的意义后,我们就更明确的知道为什么要用它了。

    二、如何使用Token?

    这是本文的重点,在这里我就介绍常用的两种方式。

    1、用设备号/设备mac地址作为Token(推荐)

    客户端:客户端在登录的时候获取设备的设备号/mac地址,并将其作为参数传递到服务端。

    服务端:服务端接收到该参数后,便用一个变量来接收同时将其作为Token保存在数据库,并将该Token设置到session中,客户端每次请求的时候都要统一拦截,并将客户端传递的token和服务器端session中的token进行对比,如果相同则放行,不同则拒绝。

    分析:此刻客户端和服务器端就统一了一个唯一的标识Token,而且保证了每一个设备拥有了一个唯一的会话。该方法的缺点是客户端需要带设备号/mac地址作为参数传递,而且服务器端还需要保存;优点是客户端不需重新登录,只要登录一次以后一直可以使用,至于超时的问题是有服务器这边来处理,如何处理?若服务器的Token超时后,服务器只需将客户端传递的Token向数据库中查询,同时并赋值给变量Token,如此,Token的超时又重新计时。

    2、用session值作为Token

    客户端:客户端只需携带用户名和密码登陆即可。

    客户端:客户端接收到用户名和密码后并判断,如果正确了就将本地获取sessionID作为Token返回给客户端,客户端以后只需带上请求数据即可。

    分析:这种方式使用的好处是方便,不用存储数据,但是缺点就是当session过期后,客户端必须重新登录才能进行访问数据。

    三、使用过程中出现的问题以及解决方案?

    刚才我们轻松介绍了Token的两种使用方式,但是在使用过程中我们还出现各种问题,Token第一种方法中我们隐藏了一个在网络不好或者并发请求时会导致多次重复提交数据的问题。

    该问题的解决方案:将session和Token套用,如此便可解决,如何套用呢?请看这段解释:

wKioL1QX85nCkJ5qAABWcdNyC0g731.png

     这就是解决重复提交的方案。

     总结:以上是个人对开发中使用Token和session的一点总结,如有叙述不当之处请指正,我将及时改正并感谢,我知道还有更多更好的使用方式,我在这里只是抛砖引玉,希望大家将您的使用方式提出来,我们一起讨论,学习,一起进步,同时也为像我一样对这方面理解薄弱的朋友提供点帮助,谢谢。

转自 (https://blog.csdn.net/c880420/article/details/80346127

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44868502/article/details/104001000

智能推荐

linux 程序溢出,linux-溢出程序-程序员宅基地

文章浏览阅读197次。后门程序: 100描述米特尼克拿到了BAT数据中心的口令后,为了确保口令被更改后仍能登陆数据中心,他从一位小伙伴那拿到了一个后门程序植入进了服务器。这个后门程序没有任何说明,但是米特尼克迅速找到了使用方法。后门程序:http://bctf.cn/files/downloads/backdoor_844d899c6320ac74a471e3c0db5e902e 安装地址:218.2.197.250:..._fff308

开源语音识别软件有哪些?-程序员宅基地

文章浏览阅读403次。开源语音识别软件有很多种, 下面列举几种常见的:Kaldi: 是一种用于语音识别的开源工具包, 支持多种语言, 并且在处理大规模语料库方面有较好的表现.HTK: 是一个用于语音识别、语音合成和语音处理的开源工具包, 支持多种语言.Julius: 是一个用于语音识别的开源软件, 支持日语和英语.Sphinx: 是一个用于语音识别的开源工具包, 支持多种语言.CMUCLMTK: 是..._多说话人语音识别开源工具

Mac os下apache正常启动localhost无法访问服务器_mac apache启动但是访问不到-程序员宅基地

文章浏览阅读8.1k次,点赞3次,收藏2次。由于删除了/private/var/log下面的日志,导致重启电脑后apache无法正常工作。重启电脑后apache无法正常运行,访问localhost或127.0.0.1都会无法找到服务器。探索:问题出现后,由于$ sudo apachectl start不会报任何错,但是访问localhost或127.0.0.1始终失败。可能情况1: 没有监听_mac apache启动但是访问不到

java list(属性方法)_java list exists-程序员宅基地

文章浏览阅读1.2w次,点赞5次,收藏17次。List的方法和属性 方法或属性 作用Capacity 用于获取或设置List可容纳元素的数量。当数量超过容量时,这个值会自动增长。您可以设置这个值以减少容量,也可以调用trin()方法来减少容量以适合实际的元素数目。Count 属性,用于获取数组中当前元素数量Item( ) 通过指定索引获取或设置元素。对于List类来说,它是一个索引器。Add( ) 在List中添加一个对象的公有方法AddRan_java list exists

Golang单元测试和压力测试-程序员宅基地

文章浏览阅读1k次,点赞22次,收藏23次。go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程类似,并不需要学习新的语法,规则和工具。go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内,所有以_test.go为后缀名的源代码文件都是go test测试的一部分,不会被go build编译到最终可执行文件中。在*_test.go文件中有三种类型的函数,单元测试函数,基准测试函数和示例函数。

Python 的 Numpy 数值计算_numpy 数组中的值 分组计数-程序员宅基地

文章浏览阅读1k次,点赞4次,收藏5次。文章目录1. Numpy 介绍2. Numpy 数组2.1 介绍2.2 数组属性2.3 创建数组1. Numpy 介绍  Numpy(Numerical Python),是 Python 科学计算的基础包。Mumpy 主要提供了以下内容:快速高效的多维数组对象 ndarray。对数组执行元素级计算以及直接对数组执行科学计算的函数。线性代数、傅里叶变换及随机数生成的功能。将 C、C++..._numpy 数组中的值 分组计数

随便推点

大数据必学Java基础(五):第一段程序_大数据学习java编程基础实例-程序员宅基地

文章浏览阅读4.2k次,点赞16次,收藏15次。文章目录第一段程序一、用notepad编写代码二、进行编译三、进行解释/翻译/执行记得保存 ctrl+s 发现出错了,分析出错原因:解决办法:将javac.exe所在的路径 配置到 环境变量path中去,这样我就可以在任意的路径下去执行这个命令:配置好环境变量以后发现代码可以成功编译: 验证:上面执行过程成功的原因:......_大数据学习java编程基础实例

[Python] pyqt6 - 如何实现关闭窗口前弹出确认框_pyqt怎么在退出时显示确定要退出吗-程序员宅基地

文章浏览阅读1.4k次,点赞34次,收藏21次。本文主要介绍了pyqt6中,如何利用窗口的closeEvent函数和QMessageBox的question函数来实现关闭窗口时弹出确认框的功能。_pyqt怎么在退出时显示确定要退出吗

Golang 元素值在经过通道传递时会被复制,这个复制是浅复制_golang channel copy-程序员宅基地

文章浏览阅读1.2k次。1. channel 元素值为切片package mainimport ( "fmt")func main() { ch := make(chan []int, 3) s := []int{1, 3, 4} ch <- s fmt.Printf("s length is %d, cap is %d\n", len(ch), cap(ch)) fmt.Printf("s address is %p\n", &s) r := <-ch r[0] = 2 _golang channel copy

数据结构学习笔记(全)_数据结构笔记整理-程序员宅基地

文章浏览阅读619次,点赞2次,收藏27次。若有两个孩子,其右孩子为q,则将左孩子的最右边结点p删除,并将p放在被删除的根节点的位置,如果被删除的p有左子树,则直接继承在p的位置。从图中的某个顶点V0出发,并在访问此顶点之后 依次访问V0的所有未被访问过的邻接点,之后按这 些顶点被访问的先后次序依次访问它们的邻接点,直 至图中所有和V0有路径相通的顶点都被访问到。先选择一个顶点(无要求),选择权值最短的边,将其与一个新的顶点连接,并将其看为一个新的整体,重复进行”选择权值最短的边,将其与一个新的顶点连接“的操作直至所有顶点相连。_数据结构笔记整理

[开发|C++] 在 Ubuntu20.04系统上编译gcc-4.9.4_ubuntu20.04 gcc9.4.0编译gcc4.9.2-程序员宅基地

文章浏览阅读566次,点赞11次,收藏9次。5. 报错信息如下。7. 报错信息如下。_ubuntu20.04 gcc9.4.0编译gcc4.9.2

3小时零基础入门微信小程序开发2024年最新版-程序员宅基地

文章浏览阅读964次,点赞27次,收藏25次。用大白话讲:变量就是一个装东西的盒子再通俗些讲:变量就是用于存放数据的容器,我们通过变量名获取对应的数据。如上图所示,我们的盒子(变量)可以装名字,布尔类型的true,还可以用来装数字。变量的本质:就是在程序的内存中申请一块用来存放数据的空间。对象只是一种特殊的数据。对象是一组无序的相关属性和方法组成。这里重点要记住属性和方法这两个新概念属性:事物的特征,对象里的属性就是用来表现该对象具备哪些特征方法:事物的行为,对象里方法就是用来表示该对象具备哪些行为。