session总结

目录:

  1. 精简总结
  2. 知识点
    什么是HttpSesssion
    怎么获取
    与其他域对比
    session的域方法
    session的实现原理

一、 精简总结:

session域 – 一次会话中共享数据的域

为了让一次会话中的多次请求能共享数据,服务器给这次会话,创建一个session域,每次请求可以共享这个session域对象。

session域对象被第一次创建时,也会顺带创建一个sessionId(cookie),并通过响应头还给浏览器,浏览器保存这个包含sessionId的cookie(cookie对象的默认生命周期也是一次会话,即浏览器关闭就消失),并记录cookie对应的服务器,这样在这次会话中,其他所有请求的请求头都会带上这个cookie,也就带上了sessionId,服务器通过内部的map,通过sessionId找到对应的session。

例:
在一次会话中,如果用户登录成功,就为这次会话创建一个session,里面保存登录成功信息,让这次会话的其他请求共享这次登录成功信息。这样,服务器不用再对每一个请求判断是否登录成功。

服务器端:

  1. 创建session:HttpSession session = request.getSession() // 通过sessionId找到对应的session,如果浏览器没有包含sessionId,则创建一个session,如果通过sessionId找到了,则返回对应的session对象
  2. 得到session:HttpSession session = request.getSession()
  3. 请求共享session中的成功信息:request.getSesssion().getAttribute(“login”)

浏览器端:
保存包含sessionId的cookie
在这里插入图片描述

二、 知识点:

1.什么是HttpSesssion

是域对象,把一个会话内需要共享的数据保存到HttSession对象中。一个会话包括很多请求,这些请求之肯定要共享数据。如果想要跟踪一次会话,就创建HTTPSession对象,让这次会话的所有请求共享这个HTTPSession对象

2. 怎么获取

l HttpSession request.getSesssion(): 通过sessionId找到对应的session,如果浏览器没有包含sessionId,则创建一个session,如果通过sessionId找到了,则返回对应的session对象

3. 与其他域对比

l HttpServletRequest:一个请求创建一个request对象,所以在同一个请求中可以共享request,例如一个请求从AServlet转发到BServlet,那么AServlet和BServlet可以共享request域中的数据;
l ServletContext:一个应用只创建一个ServletContext对象,所以在ServletContext中的数据可以在整个应用中共享,只要不启动服务器,那么ServletContext中的数据就可以共享;
l HttpSession:一个会话创建一个HttpSession对象,同一会话中的多个请求中可以共享session中的数据;

4.session的域方法

void setAttribute(String name, Object value) 用来存储一个对象,注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值,这一特性与Map相同。
Object getAttribute(String name)):用来获取session中的数据。

5.session的实现原理

当这次会话需要跟踪时(如想要这次会话中的所有请求都共享数据),服务器端创建session,session是保存在服务器端,而给客户端session的id(一个cookie中保存了sessionId)。客户端带走的是包含sessionId的cookie,而数据是保存在session中。

只要不关闭浏览器,包含sessionId的cookie会一直保存到浏览中,即这次会话中的所有访问该服务器的请求头中都会带上sessionId,而服务器会通过sessionId找到对应的session,而无需再创建新的session。

服务器是银行,浏览器是客户,sessionId是银行卡,session是在银行的钱。客户首次开户,服务器会在系统给客户留一个存钱的位置session,和一张银行卡sessionId-cookie,客户再以后每次取钱拿数据,只需要银行卡sessionId识别身份。

因为cookie默认生命周期是关闭浏览器就消失,所以sessionId只在关闭浏览器前有效。下次会话(重新打开浏览器),请求中没有sessionId,服务器会再创建一个session,重新给浏览器一个sessionId。

session也有失效时间,如果session在30分钟内没人访问,就会自动消失。所以如果在30分钟不访问服务器,即使即不关闭浏览器,请求头中有包含sessionId的cookie,sessionId对应的session也消失了。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值