---
title: JavaEE Session
date: 2017/11/08
categories:
- javaee
tags:
- javaee
- session
---
## Session 是什么?
不同于 Cookie 保存在客户端浏览器中,Session 保存在服务器上。
如果说 Cookie 机制是通过检查客户身上的“通行证”来确定客户身份的话,那么 Session 机制就是通过检查服务器上的“客户明细表”来确认客户身份。
Session 对应的类为 `javax.servlet.http.HttpSession` 类。Session 对象是在客户第一次请求服务器时创建的。
## Session 类中的方法
`javax.servlet.http.HttpSession` 类中的方法:
| **方法** | **功能** |
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| public Object getAttribute(String name) | 该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null。 |
| public Enumeration getAttributeNames() | 该方法返回 String 对象的枚举,String 对象包含所有绑定到该 session 会话的对象的名称。 |
| public long getCreationTime() | 该方法返回该 session 会话被创建的时间,自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。 |
| public String getId() | 该方法返回一个包含分配给该 session 会话的唯一标识符的字符串。 |
| public long getLastAccessedTime() | 该方法返回客户端最后一次发送与该 session 会话相关的请求的时间自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。 |
| public int getMaxInactiveInterval() | 该方法返回 Servlet 容器在客户端访问时保持 session 会话打开的最大时间间隔,以秒为单位。 |
| public void invalidate() | 该方法指示该 session 会话无效,并解除绑定到它上面的任何对象。 |
| public boolean isNew() | 如果客户端还不知道该 session 会话,或者如果客户选择不参入该 session 会话,则该方法返回 true。 |
| public void removeAttribute(String name) | 该方法将从该 session 会话移除指定名称的对象。 |
| public void setAttribute(String name, Object value) | 该方法使用指定的名称绑定一个对象到该 session 会话。 |
| public void setMaxInactiveInterval(int interval) | 该方法在 Servlet 容器指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位。 |
## Session 的有效期
由于会有越来越多的用户访问服务器,因此 Session 也会越来越多。为防止内存溢出,服务器会把长时间没有活跃的 Session 从内存中删除。
Session 的超时时间为`maxInactiveInterval`属性,可以通过`getMaxInactiveInterval()`、`setMaxInactiveInterval(longinterval)`来读写这个属性。
Tomcat 中 Session 的默认超时时间为 20 分钟。可以修改 web.xml 改变 Session 的默认超时时间。
例:
```xml
| Session 信息 | 值 |
|---|---|
| id | \n" + "" + session.getId() + " |
| 创建时间 | \n" + "" + df.format(createTime) + " |
| 最后访问时间 | \n" + "" + df.format(lastAccessTime) + " |
| 用户 ID | \n" + "" + userID + " |
| 访问统计: | \n" + "" + visitCount + " |