会话跟踪技术综述
会话跟踪技术综述
本文会对会话跟踪技术进行综述性介绍。首先,本文会介绍会话的概念和定义,并通过例子去体会和认识会话,形成对会话的感性认识和理性理解;其次,本文如何实现会话跟踪进行综述,概要介绍各种会话跟踪技术;最后,本文对每一种会话跟踪技术的具体实现原理进行详细介绍。
提纲
1、会话的概念
2、会话跟踪的概念和会话跟踪技术综述
3、会话跟踪技术详细介绍
1、会话的概念
============
会话(session),指的是web应用程序中客户端浏览器与服务器之间的一系列的请求响应动作。
在Web应用程序中,服务器端和客户端之间交互使用的是Http协议,但是Http协议是一个无状态的协议,这里无状态的含义是每一个服务器和客户端之间的连接和它之前的连接之间是没有任何关系的,这是协议本身规定的。
可是,在web应用程序中,开发者希望同一个浏览器在连续的一段时间中对服务器的多次访问之间是相互关联的,而这连续的多次访问被称为是一个会话。
因此,从这里可以看出会话的概念,指的是web应用程序中客户端和服务器端之间的一些列请求响应动作。
会话还有其他的定义,不过在这个定义下,我们会知道会话是有持续时间的,在一个会话中客户端和服务器端是进行了一些列的请求/响应动作的。
既然http协议规定相邻的两次请求之间是没有关联的,而web应用程序却希望多次请求之间有关联,这就不能用http协议本身来实现会话了,因此也就有了其他的实现会话的方法,这些方法就叫会话跟踪技术。
2、会话跟踪的概念和会话跟踪技术综述
===============================
web应用程序中,在客户端对服务器端的多次请求之间建立联系,从而让多次请求形成一个会话,那么就相当于对请求进行了跟踪,第一次请求完了,跟着第二次请求,第二次请求完了,跟着第三次请求,如此多次,直到彻底关闭浏览器,这多次请求构成了一个会话,就是一个客户端和服务器端的对话session,这就是会话跟踪的含义,也就是它的概念。
因此,会话的实现方法又被称为会话跟踪技术。从这里可以看出会话跟踪是人们另外想出来的技巧,并不是客户端、服务器端(包括web服务器软件和web应用软件)、http协议这三者的本来有的功能,因此它只能被称为技术。
那么,会话跟踪技术有哪些呢?
从原理上来分析,客户端和服务器之间的交互协议http不保存相邻两次请求之间的联系或者状态,那么要实现会话跟踪就要在客户端、服务器端、http协议三方面下工夫了。
目前,主要使用的会话跟踪技术有这么四种:
(1)cookie,cookie是客户端的会话跟踪技术,它是在客户端这边实现的会话跟踪技术。
(2)session,session是服务器端(指的web服务器软件本身,而不是web应用程序)的会话跟踪技术(这里的session是session的另一个含义),它是在服务器端这边实现的会话跟踪技术。
session是依赖cookie的,如果浏览器的用户禁用了cookie,那么session也将失效,这种情况下,还想实现会话跟踪的话就需要url重写技术和隐藏表单域技术了。
(3)url重写,是在http协议上实现的会话跟踪技术,是在cookie和session失效的情况下
(4)隐藏表单域,它是web应用程序上实现的会话跟踪技术
不过,目前实践中使用最频繁的还是 session 来实现会话跟踪。当然具体到一个web应用程序中用什么技术实现会话跟踪,就取决于做这个web应用程序的工程师了,他熟悉什么,会使用什么可能就使用什么了。
3、会话跟踪技术详细介绍
=====================
下面对四种会话跟踪技术分别进行详细的介绍。
3.1 cookie
--------------
cookie是通过客户端进行会话跟踪的技术。从定义上来说,cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息,有了cookie这样的技术,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的cookie得到客户端特有的信息,从而动态生成与该客户端相对应的内容。
3.2 session
---------------
与cookie相对的一个解决方案是session,它是通过服务器端进行会话跟踪的技术。
需要在这里明确一下Session的含义。首先,我们通常都会把Session翻译成会话,因此我们可以把客户端浏览器与服务器之间一系列交互的动作称为一个Session。从这个定义出发,我们会提到Session持续的时间,会提到在Session过程中进行了什么操作等等;其次,Session指的是服务器端为客户端所开辟的存储空间,在其中保存的信息就是用于会话跟踪的。从这个语义出发,我们则会提到往Session中存放什么内容,如何根据键从Session中获取值等。
要使用Session,第一步当然是创建Session了。那么Session在何时创建呢?当然还是在服务器端程序运行的过程中创建的,不同语言实现的应用程序有不同创建Session的方法。
而在Java中是通过调用HttpServletRequest的getSession方法(使用true作为参数)创建的。在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session,从而再次使用之。正式这样一个过程,用户的状态也就得以保持了,从而,看起来多个请求属于同一个session了,就是现实了会话跟踪的目的。
3.3 url重写
---------------
URL重写技术就是在URL结尾添加一个附加数据以标识该会话,把会话ID通过URL的信息传递过去,以便在服务端进行识别不同的用户。
如果浏览器不支持Cookie或用户阻止了所有Cookie,可以把会话ID附加在HTML页面中所有的URL上,这些页面作为响应发送给客户。这样,当用户单击URL时,会话ID被自动作为请求行的一部分而不是作为头行发送回服务器。这种方法称为URL重写(URL rewriting)。
3.4 隐藏表单域
---------------------
比如在第一张页面中输入用户名和密码登陆,服务器生成响应返回第二张页面。当第二张页面提交时可能仍然需要知道来自第一张页面中的用户名。
那么就可以通过隐藏表单域来实现这一连续的过程。当第一张页面提交后,服务器端作出响应返回第二张页面,此页面中用隐藏域记录了来自登陆时的用户名。通俗说就是当服务器回发给客户端的响应中,就同时把用户名再次回发到客户端,用隐藏域隐藏起来,是不可见的。当第二张页面提交时,此隐藏域中的用户名一并随表单提交。这样服务器就仍然可以判断此用户是否与以前的用户相同。于是,再次处理完结果后继续将响应回发给客户端,且此响应中也仍然包含了用户名,在客户端中仍然用隐藏域将这一信息隐藏。
这样就完成了一个连续请求的动作,但是对于用户,这是不可见的。
参考资料:
1、https://504056383.iteye.com/blog/2163963?utm_source=tuicool,简单介绍了会话、会话跟踪的概念,并对四种会话跟踪方式进行了概述,有了感性的认识,但是不理解各种技术的具体含义。
2、https://www.cnblogs.com/jmzz/archive/2011/04/16/2018492.html,关于会话跟踪的另一些零散的论述,从这篇中理解了会话的定义、实现会话的session和cookie技术。
3、https://blog.csdn.net/shuye_gen/article/details/78135959,从这篇中理解了url重写技术
4、https://blog.csdn.net/qq_20545159/article/details/49499407,从这篇中理解了隐藏表单域技术的实现原理
5、https://baike.baidu.com/item/URL%E9%87%8D%E5%86%99/5094341?fr=aladdin,详解了url重写的实现原理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通