Session
Session会话
1、 Session 就一个接口(HttpSession) 。
2、 Session 就是会话。 它是用来维护一个客户端和服务器之间关联的一种技术。
3、 每个客户端都有自己的一个 Session 会话。
4、 Session 会话中, 我们经常用来保存用户登录之后的信息。
5、 Session是保存在服务器端的。
创建和获取Session
request.getSession() 创建和获取
第一次调用是: 创建 Session 会话
之后调用都是: 获取前面创建好的 Session 会话对象。
getId() 得到 Session 的会话 id 值。
每个会话都有一个身份证号。 也就是 ID 值。 而且这个 ID 是唯一的。
isNew(); 判断到底是不是刚创建出来的(新的)
判断到底是不是刚创建出来的(新的)
true 表示刚创建
false 表示获取之前创建
Session域数据的存取
往Session中保存数据
/**
* 往 Session 中保存数据
* @param req* @param resp
* @throws ServletException
* @throws IOException
*/
protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
req.getSession().setAttribute("key1", "value1");
resp.getWriter().write("已经往 Session 中保存了数据");
} /
**
获取Session域中的数据
/
**
* 获取 Session 域中的数据
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void getAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
Object attribute = req.getSession().getAttribute("key1");
resp.getWriter().write("从 Session 中获取出 key1 的数据是: " + attribute);
}
Session 生命周期控制
- public void setMaxInactiveInterval(int interval)
设置 Session 的超时时间( 以秒为单位) , 超过指定的时长, Session
就会被销毁。
-
值为正数的时候, 设定 Session 的超时时长。
-
负数表示永不超时(极少使用)
示例:设置3秒后超时
protected void life3(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 先获取 Session 对象 HttpSession session = req.getSession(); // 设置当前 Session3 秒后超时 session.setMaxInactiveInterval(3); resp.getWriter().write("当前 Session 已经设置为 3 秒后超时"); }
- public int getMaxInactiveInterval()
获取 Session 的超时时间
3. public void invalidate()
让当前 Session 会话马上超时无效。
```java
protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
// 先获取 Session 对象
HttpSession session = req.getSession();
// 让 Session 会话马上超时
session.invalidate();
resp.getWriter().write("Session 已经设置为超时(无效) ");
}
```
Session默认时常
- Session 默认时常
Session 默认的超时时间长为 30 分钟。
因为在 Tomcat 服务器的配置文件 web.xml中默认有以下的配置, 它就表示配置了当前 Tomcat 服务器下所有的 Session
超时配置默认时长为: 30 分钟。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
- 修改web 工程Session默认时长
在自己的web.xml配置文件中 写如下,就改成了20min
<!--表示当前 web 工程。 创建出来 的所有 Session 默认是 20 分钟 超时时长-->
<session-config>
<session-timeout>20</session-timeout>
</session-config>
- 修改个别Session的时常
setMaxInactiveInterval()设置单个的session时长
session.setMaxInactiveInterval(int interval)//单独设置超时时长。
Session 的超时
Session超时指的是客户端两次请求的最大间隔时常。
浏览器和 Session 之间关联的技术内幕
Session 技术, 底层其实是基于 Cookie 技术来实现的.
就是第一次创建Session会话的时候会创建一个Cookie对象,Cookie的key就是这个Session的id值,传给客户端。
客户端每次请求就会带着这个cookie,然后服务器端通过这个id在服务器内存中查找这个id对应的session。
如果把cookie删了,那这个session就找不到了,就会重新创建。