深入理解JSP/Servlet Session会话管理机制

HTTP
是一种无状态协议,这意味着每次客户端检索网页时,都要单独打开一个服务器连接,因此服务器不会记录下先前客户端请求的任何信息。它与FTP、Telnet等协议不同,FTP等协议可以记住用户的连接信息。

会话(Session)是指一个终端用户与交互系统进行通信的时间间隔,通常指从登陆系统到注销系统之间所经过的时间以及如果需要的话,可能还有一定操作空间。JSP有四种方式实现会话跟踪功能。

  1. Cookie

服务器在响应请求时可以将一些数据以"键-值"对的形式通过响应信息保存在客户端。当浏览器再次访问相同的应用时,会将原先的存有session
ID的Cookie通过请求信息带到服务器端,网络服务器通过识别唯一的session ID来代表每个客户端,从而识别这个客户端接下来的请求。

用于会话跟踪的Cookie叫做会话Cookie。Servlet规范中会话跟踪的cookie名字必须是JSESSIONID,保存在浏览器的内存中。

Cookie可以用于保持用户的会话状态,但Cookie信息保存在客户端,存在较大的安全隐患,且一般浏览器对Cookie的数目及数据大小有严格的限制。在Web应用中,一般情况下通过HttpSession对象保持会话状态

  1. Session

Session技术则是服务端的解决方案,它是通过服务器来保持状态的。在Java中是通过调用HttpServletRequest的getSession方法(使用true作为参数)创建的。在创建了Session的同时,服务器会为该Session生成唯一的Session
id,而这个Session
id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session
id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session
id找到相应的Session,从而再次使用之。正式这样一个过程,用户的状态也就得以保持了。

  1. 隐藏表单域

隐藏表单域是将会话ID添加到HTML的隐藏表单中(类型为hidden的input)。重定向和转发

  1. 重写URL

把会话ID编码在URL中。
例:counter.jjsp;jsessionnid=be8d697876787876befdbde898789098980这样,即使浏览器不支持cookie,也能够实现会话跟踪。

对于URL复写,服务器从请求的URI中提取出会话ID,并把该请求与相应的会话关联起来,然后在访问会话数据的时候,JSP页面所进行的处理方式就和使用cookie跟踪会话id时所使用的方式完全相同。所以sesssion的实现要依靠cookie或URL复写技术。

时间: 2024-07-30 03:36:37

深入理解JSP/Servlet Session会话管理机制的相关文章

Session会话保持机制的原理与Tomcat Session Cluster示例

一.Session的定义 在计算机科学中,特别是在网络中,session是两个或更多个通信设备之间或计算机和用户之间的临时和交互式信息交换.session在某个时间点建立,然后在之后的某一时间点拆除.建立的通信session可以在每个方向上涉及多个消息.session通常是有状态的,这意味着至少一个通信部分需要保存关于会话历史的状态信息以便能够进行通信,而在无状态通信中,通信由具有响应的独立请求组成.--Wikipedia Session:在计算机中,尤其是在网络应用中,称为"会话控制"

分布式应用session会话管理-基于redis

session会话在单台服务器下不会出现共享问题,现在应用部署方式都是分布式,或者集群部署,这样必然会面临一个问题,session共享. session共享的解决方案也有很多, 一.web服务器的粘性请求,比如采用nginx请求分发,使用ip_hash这种负载均衡方式,客户端请求只会被分发到相同的后台server,这样可以避免session共享的问题.但是缺点也很明显 二.基于数据库存储(网站用户量大的情况下,频繁dml数据,对db压力大) 三.基于cookie存储(安全问题.虽然可以加密存储.

第二章 Session会话管理

采用网址重写的缺点: 在有些Web浏览器中,URL限制为2000个字符. 仅当有链接要插入值时,值才能转换成后面的资源.此外,要把值添加到静态页面的链接中,可不是一件容易的事情. 网址重写必须在服务器端有效.所有的链接都必须带有值,这样可能出现一个问题,即一个页面中可能会有许多个链接. 某些字符,例如空格.&符号及问号都必须进行编码. 添加到URL中的信息是明显可见的,这种情况有时可不是我们所期待的. 网址重写案例设计: 1.访问top10,返回一个页面,该页面中的每个按钮的url都被重写了,加

深入理解JVM(二)自动内存管理机制

2.1 C.C++内存管理是由开发人员管理,而Java则交给了JVM进行自动管理 2.2 JVM运行时数据区:方法区.堆(运行时线程共享),虚拟机栈.本地方法栈.程序计数器(运行时线程隔离,私有) 2.2.1 程序计数器(Program Counter Register):每一个线程都独有一个程序计数器,并且分配了一块线程私有的小块内存,程序运行时,这个计数器会记录字节码文件运行的行数,当线程切换时,则通过这个行数继续执行下面的操作 2.2.2 虚拟机栈(Java Virtual Machine

session management会话管理的原理

web请求与响应基于http,而http是无状态协议.所以我们为了跨越多个请求保留用户的状态,需要利用某种工具帮助我们记录与识别每一次请求及请求的其他信息.举个栗子,我们在淘宝购物的时候,首先添加了一本<C++ primer>进入购物车,然后我们又继续去搜索<thinking in java>,继续添加购物车,这时购物车应该有两本书.但如果我们不采取session management会话管理的话,基于http无状态协议,我们在第二次向购物车发出添加请求时,他是无法知道我们第一次添

客户端(ios和android)与服务器之间的会话管理(session和cookie)

项目前提: 客户端访问服务器接口需要携带根据username和password生成的access_token, 即访问所有(除获取access_token的接口)都要携带access_token, 服务器端通过拦截器判断用户access_token是否失效等. 应用场景: 1.浏览器访问服务器获取access_token接口,通过username和password获取access_token. 2.服务器根据username和password生成access_token,并将access_tok

4.会话管理(Session)

1.会话管理的概念和基本原理: 会话管理概念: 会话的实现过程: 2.使用Cookie.隐藏域.URL重写实现会话管理 创建并向客户端发送Cookie; 从客户端读取Cookies Cookie的方法: Cookie的优缺点: 使用隐藏的表单域: 使用URL重写: Session会话管理的原理和技术实现: 使用Session对象: 会话失效: Session 与URL重写 Session的方法: 原文地址:https://www.cnblogs.com/Firesun/p/9655479.htm

Session的工作机制详解和安全性问题(PHP实例讲解)

我们先简单的了解一些http的知识,从而理解该协议的无状态特性.然后,学习一些关于cookie的基本操作.最后,我会一步步阐述如何使用一些简单,高效的方法来提高你的php应用程序的安全性以及稳定行. 我想大多数的php初级程序员一定会认为php默认的session机制的安全性似乎是有一定保障的,事实恰好相反 – php团队只是提供了一套便捷的session的解决方案提供给程序员使用,至于安全性的话,应该由程序员来加强,这是应用程序开发团队的责任.因为,这 里面的方法很多,可以这么说吧,没有最好,

OWASP WEB会话管理备忘单 阅读笔记

https://www.owasp.org/index.php/Session_Management_Cheat_Sheet#Session_ID_Properties 会话简介 HTTP是一种无状态的协议,每一对请求和响应与其他的web交互是相互独立的,如果要跟踪用户的访问状态,就需要引入会话机制,对用户的访问序列进行管理. 会话管理,将认证和访问控制(也叫授权)连接起来,在认证之前可能有未认证的会话,在访问控制之后,要有会话销毁机制. 一旦认证的会话建立,会话ID就相当于最强的认证手段, 等