Servlet——HttpSession

一、HttpSession客户端打开浏览器连接服务端后生成一个会话(HttpSession对象),直到浏览器关闭此对象才销毁;

  //底层依赖Cookie,或是URL重写;

  //session的生成和销毁均有tomcat执行,程序员无法干预,且和jvm的gc机制也无关;

 

 

二、获取HttpSession

  (1HttpSession request.getSesssion();//如果存在则获取,不存在则创建;

  (2HttpSession request.getSession(boolean);

    //true:与(1)一样

    //false:存在则获取,不存在返回null;

三、操作属性方法:

  1.设置属性:void setAttribute(String name, Object object);//多次调用同个name属性会覆盖;

  2.获取属性:Object getAttribute(String name);//获取没设置过的属性名返回null;

  3.删除属性:void removeAttribute(String name);

  4.获取所有本域的属性名:Enumeration getAttributeNames();

四、其他常用方法:

 1)获取sessionId:String getId();

  //sessionid在http头中的格式:Set-Cookie: JSESSIONID=7FC9BB641898ABC83A34B8DB972B3629;

 2)获取最大不活动时间int getMaxInactiveInterval();

  //返回单位秒;默认为30分钟;如果30分钟没有使用,tomcat会自动在session池中移除这个session;

 3)设置最大不活动时间:void setMaxInactiveInterval(int interval);

  //设置单位秒;0或负数表示永远不超时; 

(4)返回session创建的时间:long getCreationTime();//返回单位毫秒;

(5)返回session的最后活动时间:long getLastAccessedTime();//返回单位毫秒;

6)重置sessionvoid invalidate();//强制失效,且重新生成新的session;//场景用户注销功能;

(7)查看session是否为新:boolean isNew();

  //当客户端第一次请求时,服务器为客户端创建session,但这时服务器还没有响应客户端,也就是还没有把sessionId响应给客户端时,这时session的状态为新。

1)web.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>Test</servlet-name>
        <servlet-class>com.qf.controller.Test</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Test</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
</web-app>

2)测试类:

public class Test extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        //获取sessionId
        String JSESSIONID = session.getId();
        System.out.println(JSESSIONID);
        //获取最大不活动时间
        int maxInactiveInterval = session.getMaxInactiveInterval();
        System.out.println(maxInactiveInterval);
        //设置最大不活动时间
        session.setMaxInactiveInterval(60);
        System.out.println(session.getMaxInactiveInterval());
        //返回session创建的时间
        System.out.println(session.getCreationTime());
        //返回session的最后活动时间v
        System.out.println(session.getLastAccessedTime());
        //重置session
        session.invalidate();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

五、配置最大不活动时间:

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

六、设置session关闭浏览器后还保存:

@WebServlet("test")
public class Test extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        String JSESSIONID = session.getId();
        Cookie cookie = new Cookie("JSESSIONID", JSESSIONID);
        cookie.setMaxAge(30 * 60);
        resp.addCookie(cookie);
    }
}

  注意点:不能直接修改名为JSESSIONID的值,因为不是相同的对象,需要自己构建JSESSIONID对象

七、session失效方法小结:

  (1)等待30min;

  (2)设置setInactiveInterval();//单位分;

  (2)修改web.xml的<session-config>标签;

  (4)调用invalidate()方法;

  (5)清空浏览器上所有的Cookie;

 

posted @ 2019-07-29 16:51  开拖拉机的拉风少年  阅读(465)  评论(0编辑  收藏  举报