session的概念
Session 是另一种记录浏览器状态的机制。不同的是Cookie保存在浏览器中,Session保存在服务器中。用户使用浏览器访问服务器的时候,服务器把用户的信息以某种的形式记录在服务器,这就是Session。session常见API
-
long getCreationTime();【获取Session被创建时间】
-
String getId();【获取Session的id】
-
long getLastAccessedTime();【返回Session最后活跃的时间】
-
ServletContext getServletContext();【获取ServletContext对象】
-
void setMaxInactiveInterval(int var1);【设置Session超时时间】
-
int getMaxInactiveInterval();【获取Session超时时间】
-
Object getAttribute(String var1);【获取Session属性】
-
enumeration getAttributeNames();【获取Session所有的属性名】
-
void setAttribute(String var1, Object var2);【设置Session属性】
-
void removeAttribute(String var1);【移除Session属性】
-
void invalidate();【销毁该Session】
-
boolean isNew();【该Session是否为新的】
Session的生命周期和有效期
-
Session在用户第一次访问服务器Servlet,jsp等动态资源就会被自动创建,Session对象保存在内存里,这也就为什么上面的例子可以直接使用request对象获取得到Session对象。
-
如果访问HTML,IMAGE等静态资源Session不会被创建。
-
Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,无论是否对Session进行读写,服务器都会认为Session活跃了一次。
-
由于会有越来越多的用户访问服务器,因此Session也会越来越多。为了防止内存溢出,服务器会把长时间没有活跃的Session从内存中删除,这个时间也就是Session的超时时间。
session的过期时间是从什么时候开始计算的?是从一登录就开始计算还是说从停止活动开始计算?
答:从session不活动的时候开始计算,如果session一直活动,session就总不会过期。
从该Session未被访问,开始计时; 一旦Session被访问,计时清0;
设置session过期的三种方法
1.在tomcat/conf/web.xml文件中设置,对所有web应用都有效(默认为分钟) <session-config>
<session-timeout>20</session-timeout>
</session-config>
2.在单个的web.xml文件中设置,对单个web应用有效,如果有冲突,以自己的web应用为准。
3.通过setMaxInactiveInterval()方法设置(默认为秒)。
httpSession.setMaxInactiveInterval(60);
httpSession.getMaxInactiveInterval();
Session和Cookie有效期的区别
- Session的周期指的是不活动时间,在有效期内活动,则会重新计时。Cookie的有效期和是否活动无关。
- 重启Tomcat,重新加载web应用,关机都会使Session失效。
- removeAttribute()来设定某个session失效。
- invalidate()让session中的所有属性失效