1.session简介

  • 产生: 第一次调用 request.getSession()时产生
  • 作用: 存储访问该程序的一个用户的信息
  • 生命周期: 第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个session并返回。当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。如果服务器非正常关闭,没有到期的session也会跟着销毁。如果调用session提供的invalidate(),可以立即销毁session
  • 作用范围: 一次会话(服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的),本人认为:在session没有过期时,只要程序不关闭,就存在(服务器正常关闭,再启动,Session对象会进行钝化和活化操作。同时如果服务器钝化的时间在session 默认销毁时间之内,则活化后session还是存在的,否则Session不存在);同一个用户(区别ServletContent)

    2.session常用操作

    ```java HttpSession session = req.getSession(); //创建session,同时也会创建一个SessionId,并放到respose中 session.setAttribute(“student”, student); //往session中添加用户信息 session.setMaxInactiveInterval(10 * 60); //设置session作用域的时效是10分钟

String sessionId = req.getRequestedSessionId();//获取sessionId //根据sessionid找不到session,返回空;注意sessionId不能为空,不然会报空指针异常 HttpSession session = req.getSession(false); Student student = (Student) session.getAttribute(“student”); //从session作用域中获取数据 session.invalidate();//销毁session

  1. **req.getSession(false)讲解**<br /> session作用域是根据SessionId来获取的,只不过SessionId这一步被隐藏了;sessionId可以错,但是不能没有。如果没有SessionId就调用这个方法的话,会报出一个空指针异常的。
  2. <a name="6UCe3"></a>
  3. ## 3.自定义sessionId
  4. 当我们创建session时,会自动网respose作用域中添加SessionId这个cookie的,只不过这个cookie没有写到硬盘中,会随着浏览器的关闭而销毁。我们一般都手动设置这个cookie,因为我们SessionIdSession的时效应该是一致的。
  5. ```java
  6. Cookie sessionId = new Cookie("JSESSIONID", session.getId());
  7. sessionId.setMaxAge(30 * 60);
  8. resp.addCookie(sessionId);

注意再SpringMVC中,就算我们手动定义了一个sessionId,他也会自动生成一个sessionId,也就是说有两个SessionId,而且自动生成的SessionId是没有办法更改的。