什么是Session,Session常用API

什么是Session:Session 是另一种记录浏览器状态的机制。不同的是Cookie保存在浏览器中,Session保存在服务器中。用户使用浏览器访问服务器的时候,服务器把用户的信息以某种的形式记录在服务器,这就是Session.

如果说Cookie是检查用户身上的”通行证“来确认用户的身份,那么Session就是通过检查服务器上的”客户信息明细表“来确认用户的身份的。Session相当于在服务器中建立了一份“客户信息明细表”。

为什么要使用Session技术?
Session比Cookie使用方便,Session可以解决Cookie解决不了的事情【Session可以存储对象,Cookie只能存储字符串】。

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有着request和ServletContext类似的方法。其实Session也是一个域对象。Session作为一种记录浏览器状态的机制,只要Session对象没有被销毁,Servlet之间就可以通过Session对象实现通讯.

通过Session简单实现Serclet之间的通信

1public class ServletSessonTest01 extends HttpServlet {
2    @Override
3    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
4        //从request获得Session对象
5        HttpSession httpSession = req.getSession();
6        //设置Session的属性
7        httpSession.setAttribute("name","九月");
8    }
9}

在另一个Servlet获得Session数据

 1public class ServletSessonTest02 extends HttpServlet {
 2    @Override
 3    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 4        //从request获取HttpSession对象
 5        HttpSession httpSession = req.getSession();
 6        //获取从ServletSessonTest01设置的Session对象值
 7        String value = (String) httpSession.getAttribute("name");
 8        long time =httpSession.getCreationTime();
 9        String sessionId = httpSession.getId();
10        System.out.println("value: "+value);
11
12    }
13}

控制台输出:

1value: 九月

一般来讲,当我们要存进的是用户级别的数据就用Session,那什么是用户级别呢?只要浏览器不关闭,希望数据还在,就使用Session来保存.

Session的生命周期

1value: 九月
2getMaxInactiveInterval: 1800

第一种方式:在tomcat/conf/web.xml文件中设置,时间值为10分钟,所有的WEB应用都有效.

1value: 九月
2getMaxInactiveInterval: 600

第二种方式:在单个的web.xml文件中设置,时间值为10分钟,对单个web应用有效,如果有冲突,以自己的web应用为准。·

1    <session-config>
2        <session-timeout>10</session-timeout>
3    </session-config>


第三种方式:通过setMaxInactiveInterval()方法设置

1        //从request获得Session对象
2        HttpSession httpSession = req.getSession();
3        //设置Session的属性
4        httpSession.setAttribute("name","九月");
5        //设置Session最长超时时间为60秒,这里的单位是秒
6        httpSession.setMaxInactiveInterval(60);
1value: 九月
2getMaxInactiveInterval: 60

Session的有效期

    • Session的有效期是指不活动的时间,如果我们设置是60s,在60s之前,没有访问Session,
      Session属性失效,若你在60s再次访问过Session,则重新计时。

    • 如果重启了tomcat,reload web应用,或者关机了,Session也会失效。如果希望某个Session失效,可以使用removeAttribute()设置。

    • Cookie的生命周期按累计的时间来计算的。

    • Session在用户第一次访问服务器Servlet,JSP等动态资源时就会被自动创建,Session对象保存在内存里,这也就为什么上面的例子可以直接使用request对象获取得到Session对象。

    • 如果访问HTML,IMAGE等静态资源Session不会被创建。

    • Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,无论是否对Session进行读写,服务器都会认为Session活跃了一次。

    • 由于会有越来越多的用户访问服务器,因此Session也会越来越多。为了防止内存溢出,服务器会把长时间没有活跃的Session从内存中删除,这个时间也就是Session的超时时间。

    • Session的超时时间默认是30分钟。有三种方式可以对Session的超时时间进行修改。

1value: 九月
2getMaxInactiveInterval: 1800

第一种方式:在tomcat/conf/web.xml文件中设置,时间值为10分钟,所有的WEB应用都有效.

1value: 九月
2getMaxInactiveInterval: 600

第二种方式:在单个的web.xml文件中设置,时间值为10分钟,对单个web应用有效,如果有冲突,以自己的web应用为准。·

1    <session-config>
2        <session-timeout>10</session-timeout>
3    </session-config>


第三种方式:通过setMaxInactiveInterval()方法设置

1        //从request获得Session对象
2        HttpSession httpSession = req.getSession();
3        //设置Session的属性
4        httpSession.setAttribute("name","九月");
5        //设置Session最长超时时间为60秒,这里的单位是秒
6        httpSession.setMaxInactiveInterval(60);
1value: 九月
2getMaxInactiveInterval: 60

Session的有效期

  • Session的有效期是指不活动的时间,如果我们设置是60s,在60s之前,没有访问Session,
    Session属性失效,若你在60s再次访问过Session,则重新计时。

  • 如果重启了tomcat,reload web应用,或者关机了,Session也会失效。如果希望某个Session失效,可以使用removeAttribute()设置。

  • Cookie的生命周期按累计的时间来计算的。

猜你喜欢

转载自blog.csdn.net/qq_37745470/article/details/84202315
今日推荐