第一百一十五期:Web开发必须掌握的三个技术:Token、Cookie、Session

在Web应用中,HTTP请求是无状态的。即:用户第一次发起请求,与服务器建立连接并登录成功后,为了避免每次打开一个页面都需要登录一下,就出现了cookie,Session。

作者:一颗小梪梪

在Web应用中,HTTP请求是无状态的。即:用户第一次发起请求,与服务器建立连接并登录成功后,为了避免每次打开一个页面都需要登录一下,就出现了cookie,Session。

Cookie

Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。Cookie存储的数据量有限,且都是保存在客户端浏览器中。不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用Cookie实际上只能存储一小段的文本信息。

例如:登录网站,今输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是Cookie。

Session

Session是另一种记录客户状态的机制,它是在服务端保存的一个数据结构(主要存储的的SessionID和Session内容,同时也包含了很多自定义的内容如:用户基础信息、权限信息、用户机构信息、固定变量等),这个数据可以保存在集群、数据库、文件中,用于跟踪用户的状态。

客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

用户第一次登录后,浏览器会将用户信息发送给服务器,服务器会为该用户创建一个SessionId,并在响应内容(Cookie)中将该SessionId一并返回给浏览器,浏览器将这些数据保存在本地。当用户再次发送请求时,浏览器会自动的把上次请求存储的Cookie数据自动的携带给服务器。

服务器接收到请求信息后,会通过浏览器请求的数据中的SessionId判断当前是哪个用户,然后根据SessionId在Session库中获取用户的Session数据返回给浏览器。

例如:购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息就用到了Session。

如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。

Token

HTTP请求都是以无状态的形式对接。即HTTP服务器不知道本次请求和上一次请求是否有关联。所以就有了Session的引入,即服务端和客户端都保存一段文本,客户端每次发起请求都带着,这样服务器就知道客户端是否发起过请求。

这样,就导致客户端频繁向服务端发出请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否。而Session的存储是需要空间的,频繁的查询数据库给服务器造成很大的压力。

在这种情况下,Token应用而生。

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌。当客户端第一次访问服务端,服务端会根据传过来的唯一标识userId,运用一些算法,并加上密钥,生成一个Token,然后通过BASE64编码一下之后将这个Token返回给客户端,客户端将Token保存起来(可以通过数据库或文件形式保存本地)。下次请求时,客户端只需要带上Token,服务器收到请求后,会用相同的算法和密钥去验证Token。

最简单的Token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由Token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接Token请求服务器)。

使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:

客户端使用用户名跟密码请求登录

服务端收到请求,去验证用户名与密码

验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端

客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者数据库里

客户端每次向服务端请求资源的时候需要带着服务端签发的 Token

服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

APP登录的时候发送加密的用户名和密码到服务器,服务器验证用户名和密码,如果成功,以某种方式比如随机生成32位的字符串作为Token,存储到服务器中,并返回Token到APP,以后APP请求时,凡是需要验证的地方都要带上该Token,然后服务器端验证Token,成功返回所需要的结果,失败返回错误信息,让他重新登录。

对于同一个APP同一个手机当前只有一个Token;手机APP会存储一个当前有效的Token。其中服务器上Token设置一个有效期,每次APP请求的时候都验证Token和有效期。

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期科技领域知识)

歌谣带你看java面试题

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

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

相关文章

这个博客复活了

原来因为页面配置的问题出了一堆的bug,久而久之就不想管了。 但是经过了漫长的寻找博客的过程中,我还是回到了这里。 洛谷博客实在是有点太简陋了,\(hexo github\)上传太麻烦,要clean然后g,然后d。 之后我就重新弄了下界面, 现在…

第一百一十六期:不能错过!你必须知道的3种重要Python技能

学习Pandas是很棒的体验,学习Numpy也很有趣。但是,你是否过早地开始使用程序库了呢?这也许是因为你还没有意识到pure python的魅力。 作者:读芯术 学习Pandas是很棒的体验,学习Numpy也很有趣。但是,你是否…

Erlang消息传递-tut15.erl

作 w3cschool erlang 的练习 --------- 1 -module(tut15).2 3 -export([start/0, ping/2, pong/0]).4 5 %% Erlang 消息传递6 %% Erlang 进程之间的消息可以是任何简单的 Erlang 项. 比如说, 可以是列表、元组、整数、原子、进程标识等等7 %% recevie 关键字的语法: 请注意, 在…

673. Number of Longest Increasing Subsequence

文章目录1 题目理解2 动态规划1 题目理解 Given an integer array nums, return the number of longest increasing subsequences. Notice that the sequence has to be strictly increasing. 输入:整数数组int[] nums 输出:最长递增子序列的个数 规则&…

第一百一十七期:爱上 Go 语言的10个理由

这个月 Go 语言就将迎来它的10岁生日了,于是我们特地列出了10条让你可以开心使用 Go 语言的理由。 作者:4bytes 这个月 Go 语言就将迎来它的10岁生日了,于是我们特地列出了10条让你可以开心使用 Go 语言的理由。 Map 集合/映射默认使用0值 …

Nhibernate.hbm2ddl.auto配置详解

hibernate.cfg.xml 中hibernate.hbm2ddl.auto配置节点如下&#xff1a; <properties><property name"hibernate.show_sql" value"true" /> <property name"hibernate.hbm2ddl.auto" value"create" /></prop…

1048. Longest String Chain

文章目录1题目理解2 动态规划1题目理解 输入&#xff1a;字符串数组words&#xff0c;字符串只包含小写字母 规则&#xff1a;对于word1和word2&#xff0c;如果在word1中任何一个位置添加一个字符能够得到word2&#xff0c;那么可以称word1为word2的前身。词链是单词 [word_1…

第一百一十八期:运行 JavaScript 代码片段的 20 种工具

运行 JavaScript 代码片段的 20 种工具 前端日常开发中&#xff0c;我们使用喜爱的 IDE 调试 JavaScript 代码&#xff0c;比如我喜欢的代码编辑器有两个&#xff0c;Sublime Text 3 和 VS Code&#xff0c;前几年还使用过 Atom&#xff0c;偶尔我们会遇到临时需要快速分享给同…

如何建立好的索引.--针对Distinct

SQL语句SELECT DISTINCT EDOWN,EDOPT FROM EMFLIB.EQEDIPF WHERE EDCHK1 AND EDCHK2M AND EDCHK3 AND EDCHK4 AND EDTAG2数据库记录总数 1518741条符合查询的记录数 657225条最早的索引 EDCHK1 EDCHK2 EDCHK3 EDCHK4 EDTAG2 EDERRCODE消耗的时间:1分钟左右为什么呢?主要的原因…

一年总结

从九月份开学到现在为止&#xff0c;将近一年的学习结束&#xff0c;做一下简要总结&#xff0c;记录一下这一年的收获。这将近一年的生活&#xff08;除去上课时间&#xff09;可以用几个单词概括。吃饭->实验室->例会&#xff08;每周一次&#xff09;->看代码->…

140. Word Break II

文章目录1 题目理解2 回溯记忆化1 题目理解 140与130的区别是&#xff0c;当字符串可分的时候&#xff0c;要求返回具体的分割字符串。 2 回溯记忆化 对于字符串s&#xff0c;如果前面一部分是单词列表中的词&#xff0c;则拆分出这个单词&#xff0c;右边的继续分割。 分割…

spring mvc学习(25):Eclipse设置代码自动提示

Eclipse只需几步简单的设置就可以像idea那样代码自动提示了&#xff0c;喜欢的小伙伴可以赶紧动手设置&#xff0c;提升效率。 第一步&#xff1a;打开Eclipse --> Window --> Preferences 第二步&#xff1a;点击Java --> 打开Editor --> 点击Content Assist 第…

打破牢笼,展望更高层次的世界

打破牢笼&#xff0c;展望更高层次的世界--------------------------------------------------------------笔者袁永福是一个十多年的老程序猿&#xff0c;一穷二白的出来创业多年&#xff0c;期间经历许多曲折和磨难&#xff0c;成功的在炮火连天的商业战场上活了下来&#xf…

spring mvc学习(26):处理数据模型--从表单到controller传输数据

创建maven项目就不说了&#xff0c;需要的找我前面的博客 pom.xml文件 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http…

第一课 回归问题与应用

本系列是七月算法机器学习课程笔记 文章目录1 不同类型的学习2 基本术语与概念3 线性回归模型3.1 什么是线性回归3.2 损失函数3.3 最小化损失函数-梯度下降3.4 学习率有什么影响3.5 过拟合与欠拟合4 逻辑回归4.1 为什么要有逻辑回归4.2 什么是逻辑回归4.3决策边界线性边界判定非…

[推荐] TechNet 广播 SQL Server 2000完结篇

TechNet中文网络广播在之前已经推出了SQL Server 2000的基础系列和管理专家系列&#xff0c;使广大听众认识并掌握了SQL Server 2000的管理技巧。本次系列作为前两次系列课程的完结篇&#xff0c;将会从性能调优及维护的角度为广大听众提供了一道实用而精致的大餐&#xff0c;本…

spring mvc学习(28):get乱码解决

get请求乱码情况 编写一个RegistServlet处理用户的Get请求数据 View Code 运行结果发现输入中文提交后显示结果为乱码&#xff1a; jsp页面中 <meta http-equiv"content-type" content"text/html; charsetUTF-8">通知浏览器以utf-8解码 get请求…

第二课 决策树与随机森林

本系列是七月算法机器学习课程笔记 文章目录1 从LR到决策树1.1 决策树1.2 决策树的终止条件1.3 决策树划分依据1.3.1 信息熵1.3.2 信息增益1.3.3 ID3模型1.3.4 信息增益率1.3.5 基尼指数1.3.6 信息熵与基尼指数1.3.7 连续值属性2 回归树2.1 回归树构建方法3 从决策树到随机森林…

在ASP.NET中自动给URL地址加上超链接(好东东)

首先&#xff0c;要想在ASP.NET(C#)中使用正则表达式就必须把 System.Text.RegularExpressions 这个命名空间包含进来&#xff1a; using System.Text.RegularExpressions; 第二步是用正则表达式识别URL超链接&#xff1a; Regex urlregex new Regex("(http:\/\/([\w.]\/…

android apk 反编译

Apk文件结构  apk文件实际是一个zip压缩包&#xff0c;可以通过解压缩工具解开。以下是我们用zip解开helloworld.apk文件后看到的内容。可以看到其结构跟新建立的工程结构有些类似。java代码&#xff1a; |-- AndroidManifest.xml |-- META-INF | |-- CERT.RSA | |-- CERT.SF…