Session在Servlet中的实现

简介

Session和Cookie类似,也是一种会话跟踪技术,cookie是将会话状态保存在了浏览器端,而Session是将会话状态保存在了服务器端。

Session会为每个会话维护一个Session,不同的会话对应不同的Session。
Session在服务器上是以Map的形式存储的:

keyvalue
随机字符串,称为SessionIDSession对对象的引用

过程

后端将Session信息写入Session列表后,系统还会将SessionID作为name,将SessionID内容的随机字符串作为value以一个全局的Cookie的形式(就是当前web应用下任一路径都会带上这个cookie,因此可以跨请求共享数据)放到响应包头中,然后将该cookie返回给客户端并且存在缓存中
当再次发出请求时,客户端会带上这个cookie

默认失效时间

在最后一次访问后的30分钟后失效
并不会在你关闭浏览器后失效(除非浏览器设置关闭后立即清空缓存,因为返回的cookie是存在缓存中的),因为对用户来说打开关闭浏览器是一次会话,但是对服务器来说,seesion失效才算一次会话

设置失效时间

单位是秒s

session.setMaxInactiveInterval(100);

创建Session

  • 通过getSession获取前端传来的HttpSession对象
  • 可以设置参数true来设定若无Session对象自动创建
  • 要共享的内容放在session的域当中
@WebServlet("/session")
public class SessionServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        String username=req.getParameter("username");
        //获取session对象,参数为true,没有session对象就创建
        HttpSession session=req.getSession(true);
        session.setAttribute("username",username);
        System.out.println(session.getId()+session.getAttribute("username"));
    }
}

前端看到的,在响应中,以cookie的形式返回了Session
在这里插入图片描述
并且路径设置为当前web应用全局
在这里插入图片描述

再次请求

当我们再次发送请求,会把SessionID的cookie传过去(不同是因为这是分两次写的博客,这是两个session)
在这里插入图片描述

域属性空间范围的对比

ServletContext:整个应用,可以跨会话
HttpSession:会话范围,可以跨请求共享
HttpServletRequest:请求范围,可以跨Servlet

销毁

session.invalidate();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值