Session对象及生命周期

Session是用于记录用户状态的技术,由服务器创建并在客户端通过cookie存储sessionId。它在一次浏览器会话中有效,可存储数据,当浏览器关闭或超过设定的超时时间,Session会结束。程序员可以通过setMaxInactiveInterval设置Session的最大有效时间,或者调用invalidate()方法手动销毁Session。
摘要由CSDN通过智能技术生成

概述:

        Session,也叫会话,是用于记录用户状态。指的是在一段时间内,单个客户端与服务器的一连串交互过程。

        在一个Session中,客户可能会多次访问同一个资源,也有可能请求访问各种不同的服务器资源。

原理:

  •  服务器会给每一次会话分配一个session对象
  • 同一个浏览器发起的多次请求,属于同一次会话(Session)
  • 首次使用到Session时,服务器会自动创建一个Session,并创建cookie存储sessionId发送回客户端,所以Session是由服务器创建的

使用:

  • Session的作用域:拥有存储数据的空间,作用范围是一次会话有效
    • 一次会话是使用同一个浏览器发送多次请求,一旦浏览器关闭,会话结束
    • 可以将数据存到session中,在一次会话的任意位置都可以进行获取
    • 可传递任何数据(基本数据类型、对象、集合、数组)

session的获取:

    //session的获取
    HttpSession session = req.getSession();
    String id = session.getId();//session的唯一标识

session保存数据

    session.setAttribute( "key",value);//键值对形式存储数据

session获取数据:

    Object key = session.getAttribute( "key" );//获取键为key的value值

session移出数据:

    session.removeAttribute( "key" );//移出session作用域中键为key的value值

部分代码实例:

@WebServlet(name = "SessionServlet",value = "/rj")
public class SessionServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //通过request对象获取session对象
        HttpSession session = req.getSession();
        //获取session唯一标识
        String id = session.getId();
        Object key = session.getAttribute( "key" );//获取键为key的value值
        session.removeAttribute( "key" );//移出键为key的value值
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet( req,resp );
    }
}
  • 生命周期

 开始:第一次使用到Session的请求,则创建Session

结束:

  •  浏览器关闭,失效
  • Session超时,则失效
    • session.setMaxlnactivelnterval(秒数);//设置最大有效时间
  • 手工销毁
    • session.invalidate();登录退出,注销
  • Session超时,则失效
@WebServlet(name = "GetSessionServlet",value = "/get")
public class GetSessionServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();

        session.setMaxInactiveInterval( 10 );

        System.out.println(session.getId());
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet( req,resp );
    }
}
  • 手工销毁
@WebServlet(name = "LifeSessionServlet",value = "/life")
public class LifeSessionServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();

        System.out.println(session.getId());
        
        session.invalidate();//立即失效,之后拿到的就是新的sessionId了
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet( req, resp );

    }
}

如有不对之处,感谢指正!!!!

如有不对之处,感谢指正!!!!

如有不对之处,感谢指正!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来一沓Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值