Java Web -> 会话管理

    xiaoxiao2023-09-24  140

    目录

    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分钟)
    最新回复(0)