尚硅谷JavaWeb笔记——Session(了解Session看这篇就够了)

Session会话

Session简介

什么是Session?

答:Session就是一个接口HttpSession。在web中Session就一会话,维护一个客户端和服务器之间关联的一种技术。每个客户端都有自己的Session会话,用来保存用户登陆之后的信息。

Session和Cookie有什么区别?

答:Cookie是保存在客户端的,Session是保存在服务器端

Session有关操作

Session的创建与获取

Session的获取和创建的API是一样的

request.getSession():第一次调用是创建Session会话,之后调用都是获取创建好的Session会话对象。

isNew():判断到底是不是刚穿件出来的(新的)

  • true表示刚穿件
  • false表示获取之前创建

每个会话都有一个身份证号,ID值(唯一),可以通过getId()获取Session的id值

protected void createOrGetSession(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // 创建和获取Session会话对象
  HttpSession session = request.getSession();
  // 判断 当前Session会话,是否是新创建出来的
  boolean isNew = session.isNew();
  // 获取Session会话的唯一标识 id
  String id = session.getId();

  //打印
  response.getWriter().write("得到的session 的 id 为: " + id + "<br/>");
  response.getWriter().write("得到的session 是否是新的 :  " + isNew + "<br/>");
}

Session数据存取

Session数据是是保存在服务器内部的数据,其可以存储对应客户端中的数据,存取方法如下

    /**
     * 往Session中保存数据
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    protected void setAttribute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getSession().setAttribute("key1", "value1");
        response.getWriter().write("存数据到 session·····");
    }

    /**
     * 获取Session域中的数据
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    protected void getAttribute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Object key1 = request.getSession().getAttribute("key1");
        response.getWriter().write("从session获取的 key1 的数据是: " + key1);
    }

Sessuib生命周期

  • public void setMaxInactiveInterval(int interval):**设置 Session 的超时时间(**以秒为单位),超过指定的时长,Session 就会被销毁。

    • 值为正数的时候,设定 Session 的超时时长。
    • 负数表示永不超时(极少使用)
  • public int getMaxInactiveInterval()获取Session的超时时常,通常session的默认超时时间是30min。该项数据可以通过在web.xml中配置实现修改

    <session-config>
      <session-timeout>30</session-timeout>
    </session-config>
    
    • 可以根据自己的需求修改所有Session或者修改某个单独的Session
  • public void invalidate():让当前Session会话立刻无效

设置当前session超时时间为3s

protected void life3s(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // 先获取Session对象
  HttpSession session = request.getSession();
  // 设置当前Session3秒后超时
  session.setMaxInactiveInterval(3);
  response.getWriter().write("  当前Session已经设置为3秒后超时   ");
}

关于Session超时概念的详细介绍

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tcevIxgM-1614148572414)(/Users/gaojunsong/Library/Application Support/typora-user-images/Java学习/JAVAWeb/image-20210219152526877.png)]

Session的超时时常:客户端两次请求的最大间隔时长

让session会话立刻超时

protected void deleteNow(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // 先获取Session对象
  HttpSession session = request.getSession();
  // 让Session会话马上超时
  session.invalidate();
  response.getWriter().write("Session已经设置为超时(无效)");
}

浏览器与session的关联

Session技术,底层其实是基于Cookie技术实现的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FLYD7Krq-1614148572417)(/Users/gaojunsong/Library/Application Support/typora-user-images/Java学习/JAVAWeb/image-20210219153955148.png)]

小结:客户端在没有Cookie的情况下访问服务器,服务器创建session,并将session存储进内存,同时将sessionId信息通过cookie发送给浏览器,浏览器收到cookies后,当携带当前cookie信息再次访问服务器时,服务器就会从内存中取出对应的session数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值