文章目录
1. Session
1.1 什么是Session
- Session 是另⼀种记录浏览器状态的机制。不同的是Cookie保存在浏览器中,Session保存在服务器中。⽤户使⽤浏览器访问服务器的时候,服务器把⽤户的信息以某种的形式记录在服务器,这就是Session。
- 如果说Cookie是检查⽤户身上的”通⾏证“来确认⽤户的身份,那么Session就是通过检查服务器上的”客户明细表“来确认⽤户的身份的。Session相当于在服务器中建⽴了⼀份“客户明细表”。
- 使用原因:Session⽐Cookie使⽤⽅便,Session可以解决Cookie解决不了的事情【Session可以存储对象,Cookie只能存储字符串】
1.2 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是否为新的】
1.3 Session作为域对象
Session作为⼀种记录浏览器状态的机制,只要Session对象没有被销毁,Servlet之间就可以通过Session对象实现通讯。
- 在 Servlet1 中设置 Session 属性。
//得到Session对象
HttpSession httpSession = request.getSession();
//设置Session属性
httpSession.setAttribute("name","邹小胖");
- 在 Servlet2 中获取到 Session 存进去的属性。
//得到Session对象
HttpSession httpSession = request.getSession();
String value = (String)httpSession.getAttribute("name");
response.getWriter().write(value);
1.4 Session 的生命周期和有效期
-
Session在⽤户第⼀次访问服务器Servlet,jsp等动态资源就会被⾃动创建,Session对象保存在内存⾥,这也就为什么上⾯的例⼦可以直接使⽤request对象获取得到Session对象。如果访问HTML,IMAGE等静态资源Session不会被创建。
-
Session⽣成后,只要⽤户继续访问,服务器就会更新Session的最后访问时间,⽆论是否对Session进⾏读写,服务器都会认为Session活跃了⼀次。
-
由于会有越来越多的⽤户访问服务器,因此Session也会越来越多。为了防⽌内存溢出,服务器会把⻓时间没有活跃的Session从内存中删除,这个时间也就是Session的超时时间。
-
Session的超时时间默认是30分钟,有三种⽅式可以对Session的超时时间进⾏修改。
三种方式:
- 在
tomcat/conf/web.xml
⽂件中设置,时间值为20分钟,所有的WEB应⽤都有效。
<session-config>
<session-timeout>20</session-timeout>
</session-config>
- 在
单个的web.xml
⽂件中设置,对单个web应⽤有效,如果有冲突,以⾃⼰的web应⽤为准。
<session-config>
<session-timeout>20</session-timeout>
</<