首页 > 其他分享 >青云——会话机制(详解)

青云——会话机制(详解)

时间:2024-07-29 21:54:16浏览次数:18  
标签:青云 会话 token session cookie 服务端 请求 详解 客户端

为什么会有这种会话机制

        1.http协议是无状态的。也就是说每次与服务器进行连接,都必须重新发送请求。连接一次,请求一次。上次和这次的连接没有任何关系。底层的TCP连接会断开,用户的ip地址可能会发生变化。但是浏览器又需要记录访问者。

        2.判断浏览器需要去判断一下,两次的请求是否是同一个人的请求。这时我们就需要进行身份验证来判断。

cookie

        1.cookie:是web服务器发给用户浏览器的一段数据,浏览器记住这个数据,在用户对于后期的操作进行一定的身份验证。cookie相当于服务端发给用户的身份凭证。如果攻击得到了用户的cookie值,相当于得到了用户身份使用cookie是为了对数据的保护。在浏览器可以十分方便看见cookie,所以cookie对于用户来讲是完全公开的

         2.cookie的特点

                a.Cookie存储在客户端(浏览器),发送请求时自动携带放在请求头中。

                b.单个Cookie保存的数据不能超过4KB。

                c.Cookie的安全性不高,别人可以分析存放在本地的Cookie并进行Cookie欺骗。

                d.Cookie默认不可跨域,可通过特殊的操作如:设置withCredentials属性为true实现跨域。

                e.cookie的有效时间:cookie默认有效期非常短暂,存在于web浏览器会话期间,当浏览器关闭,cookie也就消失了。如果要延长cookie的有效期,可以设置max-age属性(单位秒)

        3.cookie的主要属性

                a.domain:用于指定cookie在哪些域名中生效。访问什么域名的时候发生这一个特定的cookie

                b.path:cookie的生效路径,只有这个域名或者这个域名的子域名才能访问这个cookie

                c.expires:设置cookie的有效期,到期后,浏览器自动删除。如果为none,关闭浏览器临时cookie直接删除。有些网站避免用户麻烦,选用“永久性”cookie不安全。设置有效期的cookie可以使cookie在有效期内不被删除。

                d.httponly:大多数情况下,cookie只需要和服务端进行交互,并不需要让客户端js读取。当允许的时候增加了cookie泄露的风险。httponly让cookie只能使用http/https传输,使js无法读取到cookie

                e.secure:使cookie只会在https请求时发送给服务器,没有加密的http无法发送这个cookie

                f.samesite:

                        1.none:不做限制,什么情况都可以发送cookie

                        2.lax:一般情况下跨站请求不发送cookie,但点击连接发送cookie,提交表单,get提交表单带cookie,post一般不带

                        3.strict:完全禁止跨站请求使用cookie,点击站外连接也不发送cookie。url的域名属于同一个站点发送cookie(一般没有)

                        g.smaeparty:将企业的多个网站,允许企业定义一个可信站点集合

        4.使用cookie

                1.客户端发送请求到服务端

                2.服务端收到请求生成session会话

                3.服务端响应客户端,在响应头中设置set-cookie,其中包括一个重要的信息sessionid,一一对应。

                4.客户端下次使用cookie,浏览器在请求头中自动加上cookie

                5.客户端发送其他,也会携带cookie

                6.服务端收到了请求,并且验证cookie信息,是否存在sessionid,存在且一一对应则可以正常响应

session

        1.session

        在cookie中提到了sessionid用于确定用户认证,一般情况下session由服务端创建,保存在服务器,客户端和服务端之间的认证使用sessionid确认。如果在服务端包含sessionid,表示客户端和服务端之前硬已经创建过了session,去查看session,如果没有找到则可以创建一个新的session,并且sessionid和session一一对应。把sessionid发送到客户端存放在cookie中,如果找到了对应的session则验证通过。

        2.session的特点

                a.session 比 cookie 更加安全,因为它是存在服务端的,cookie 是存在客户端的。

                b.session 可以存储任意数据。

                c.session 有效期都比较短。

                d.session 存储空间比较大。

                e.session的有效时间:Session的默认失效时间是30分钟,session的过期时间是从session不活动的时候开始计算,如果session一直活动,session就总不会过期,从该Session未被访问,开始计时; 一旦Session被访问,计时清0;

        3.使用session

                a.客户端发送请求

                b.服务端创建session,将唯一标识sessionid设置在set-cookie响应中,放在客户端

                c.客户端发送请求携带cookie,通过sessionid到服务端进行验证

                d.正确响应

token

        先抓一下包看看token

        1.token

        是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次请求后,服务器生成一个token便将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可。(不会由cookie-session那么大的内存消耗)通过这种方式服务器端就不需要保存 Session 数据了,只用在客户端保存服务端返回给客户的 Token 就可以了。

        2.token的特点

                a.Token不需要存储用户信息,节约了内存,token签发后存储在客户端,不占用服务器资源,可减轻服务器压力

                b.由于不存储信息,客户端访问不同的服务器也能进行鉴权

                c.Token可以采用不同的加密方式进行签名,提高了安全性。比如由uid+time+sign进行加密算法

                d.每一次请求都需要携带 token,需要把 token 放到 HTTP 的 Header 里

        3.使用token

                a.客户端发出请求

                b.服务端验证请求是否正确

                c.验证成功,服务端发送token给到客户端

                d.客户端把token存储起来

                e.客户端再次发送请求,带上token

                f.验证成功,返回数据

总结

        cookie是服务器端生成发送给客户端在客户端保存的

        session是放在服务器端来和客户端的cookie做匹配的

        Token存储在客户端,不占用服务器资源,可减轻服务器压力

        归根结底,cookie,session,token的作用是在浏览器上保存用户的登录态,其实就是实现用户在网页上登录过一次后,一段时间内再次访问不需要重新登录,会实现自动登录的一个效果。具体使用什么方式,主要是看什么情况,具体的情况使用具体的会话方式。

标签:青云,会话,token,session,cookie,服务端,请求,详解,客户端
From: https://blog.csdn.net/2402_86439553/article/details/140782178

相关文章

  • 并查集详解
    一、概念1.定义:并查集(英文:Disjoint-setdatastructure,直译为不交集数据结构)是一种数据结构,用于处理一些不交集(Disjointsets,一系列没有重复元素的集合)的合并及查询问题2.功能:并查集主要有两个功能。将两个元素添加到一个集合中。判断两个元素在不在同一个集合。3.作......
  • MySQL数据库基础操作与概念详解(三)
    DML和DQL语句1.新增–INSERTINTO表名(字段名,字段名,…字段名)values/value(值,值,…值)–日期使用字符串的形式进行书写日期格式(yyyy-MM-ddHH-dd)1.全字段的输入(1)方式一INSERTINTOstudent(sid,sname,birthday,ssex,classid)VALUES(9,‘张三’,‘2002-9-23’,‘......
  • MySQL数据库基础操作与概念详解(二)
    二、数据库的操作1.--表结构修改–ALTERTABLE表名关键词数据;–ALTERTABLE旧表名renameas新表名;修改表名例:ALTERTABLEstudentrenameasstudents;SHOWTABLES;2.–添加字段ALTERTABLE表名ADD新字段名类型属性;ALTERTABLEstudentsADDstu_......
  • 小一保姆级 python三大核心多态、抽象类、动态添加内容详解
    一.多态多态是面向对象编程中的一个核心概念,它允许一个接口被多个数据类型实现。这意味着,即使多个类具有不同的内部实现,它们也可以共享一个公共接口。多态的实现通常依赖于继承和方法重写。继承:子类继承父类的属性和方法。方法重写:子类重写父类中的方法,以提供特定的实现。......
  • WPF 检测Windows用户会话状态:登录界面、非登录界面
    1主动获取Windows用户会话状态:登录界面、非登录界面,没有直接的Api接口,通过获取当前的前台窗台判断,条件:获取不到、UWP界面且窗体名字:windows窗体类名windows.ui.core.corewindow。 经过压测可靠usingSystem;usingSystem.Runtime.InteropServices;usingSystem.Text;......
  • Java 启动参数最全详解
    Java启动参数最全详解!在Java开发中,发布JAR文件是一个常见的操作。合理设置启动参数可以确保应用程序在不同环境中正常运行,并优化性能。本文将详细介绍所有可能的启动参数,以及它们的使用场景、设置建议和具体示例。一、JAR文件基础JAR(JavaArchive)文件用于打包Java......
  • Linux操作系统下编译、链接过程详解
    gcc和g++的区别:gcc和g++是GNU编译器集合中的两个不同的编译器,它们之间的主要区别在于它们所针对的编程语言以及它们的行为和功能。1.编译器的目标语言:gcc是用于编译C语言的编译器,而g++是用于编译C++语言的编译器。因此它们分别用于编译不同的源代码文件;2.语法支持:gcc和......
  • TCP协议详解
    TCP协议详解TCP(TransmissionControlProtocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它在网络通信中扮演着至关重要的角色,尤其是在需要保证数据完整性和顺序性的应用场景中。以下是对TCP协议的详细解析,包括其工作原理、特点、应用场合以及关......
  • AI大模型Prompt提示词工程使用详解
    AI大模型Prompt提示词工程使用详解在人工智能(AI)的浩瀚宇宙中,大型预训练模型(LargeLanguageModels,LLMs)如GPT系列、BERT等,以其卓越的自然语言处理(NLP)能力,正逐步改变着人类与机器交互的方式。这些模型不仅能够理解和生成人类语言,还能在多种任务上展现出惊人的创造力和适应......
  • rsync命令详解
     rsync命令是Linux和其他Unix-like系统上一个非常强大的命令行工具,主要用于数据同步和文件传输。它的名字是"remotesync"的缩写,但不仅限于远程同步,也支持本地文件和目录之间的同步。rsync的主要优势在于其高效的增量传输方式,即只传输源和目标之间发生变化的文件块,而不是整个文......