目录
1. 引入
2. 4种常用会话管理技术
2.1 URL重写(后端处理)
2.2 隐藏域(前端处理)
2.3 Cookies
2.4 HttpSession
1. 引入
默认情况下,WEB服务器无法区分一个HTTP请求是否为第一次访问。
因此,我们通过会话跟踪(请求一次就可以跟踪请求)的方式,来记录是否为第一次访问。
第一次请求输入登录信息,之后再次请求时,便可跟踪到上一次的请求,无需再次输入验证信息,直接登录。直到关闭浏览器或退出访问。
2. 4种常用会话管理技术
2.1 URL重写(后端处理)
将一些请求参数(通常为key=value的形式),添加到URL的查询字符中缺点
浏览器会对URL的长度进行一定的限制,不适用于请求参数过多的情况静态页面需要使用JavaScript在前端页面上获取参数,麻烦,难度大特殊字符不容易处理,需要对其进行编码,才能保证字符的安全性由于信息的安全性,以及URL重写的可见性,不适用想要对信息进行保密的情况适用场景
信息仅在少量页面间传递,且信息不敏感。
2.2 隐藏域(前端处理)
类似于URL重写,但是将值放到HTML表单的隐藏域中。外部看不到,只有服务端能看到注意
和url一样,控制页面之间的跳转尽量不要超过三个优点
没有字符数限制无需额外的编码
2.3 Cookies
特点
是一个信息片段,可以自动的在浏览器和Web服务期间交互。可存储在多个页面间传递的信息过程
将信息存储到浏览器上,给浏览器存储一个cookie的片段,浏览器会在每次发请求的时候,将片段传给服务器。为了安全考虑,可以设置Cookies的有效时间Cookies是数据片段,也有限制,通常支持每个网站20个Cookies。Cookies的删除
没有办法直接的删除Cookies,可以通过设置有效时间间接进行删除
即,将存活时间设置为0秒 -> 立即过期(删除)
cookies.setMaxAge(0);之后,resp.addCookie(cookies);
2.4 HttpSession
打开浏览器访问页面,就为浏览器建立了一次会话,建立了HttpSession。特点
一个用户可以有且仅有一个HttpSession,且不会被其他用户访问到。只在第一次访问时,自动创建可以跨所有页面存储数据要求
存放至HttpSession的值,是存储在内存中的。可以放大对象,但不应该放特别大的对象或太多的对象,否则内存占比特别大。这时,servlet容器可能将其存储在二级存储上(磁盘),可能会存在性能问题。存放的数据是Object类型,当内存不够就会存储至磁盘、文件或数据库中,这就需要序列化技术。对象需要实现序列化接口。原理
HttpServlet会话跟踪依赖于cookie一旦创建HttpServlet对象,Servlet容器就会为每个HttpSession自动生成唯一标识,是名为JSESSIONID的cookie的value。把这个cookie给浏览器,浏览器就有了jsessionid的cookie,浏览器在每次发送请求时,都会将cookie发送给服务端
发送两种方式
请求头的方式将参数加到URL上(URL重写)根据jsessionId,服务端就可以识别给请求是由那个用户发起的封装后,将cookie放入session,根据getAttrubution获取到值。有效性
在web.xml中设置过期时间,使其不永久有效不失效危害
HttpSession占用堆内存,导致堆内存消耗、负载量过大。不配置过期时间,使用容器默认配置(30分钟)