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