Servlet Session

56 阅读1分钟

什么是Session

  1. session 在服务器端,cookie 在客户端(浏览器)
  2. session 默认被存在在服务器的一个文件里(不是内存)
  3. session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
  4. session 可以放在 文件、数据库、或内存中都可以。
  5. 用户验证这种场合一般会用 session 因此,维持一个会话的核心就是客户端的唯一标识,即 session id
  6. 可以近似理解为浏览器给服务器打了个标记
  7. session id 是浏览器自动发送的

样例

public class Session001 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF8");
        resp.setCharacterEncoding("UTF8");
        resp.setContentType("text/html");
        ObjPerson person = new ObjPerson("kitty guy",1000,"中国");//自己手动创建的对象
        HttpSession session = req.getSession();
        session.setAttribute("name","王老吉");
        session.setAttribute("person",person);
        String sessionId = session.getId();

        if(session.isNew()){
            resp.getWriter().println("session创建成功 Id为:"+sessionId);
        }
        else
        {
            resp.getWriter().println("session已经存在Id为:"+sessionId);
            resp.getWriter().println("<br>");
            resp.getWriter().println("servlet创建的session name的对象为"+session.getAttribute("name"));
            resp.getWriter().println("<br>");
            resp.getWriter().println("servlet创建的session person的对象为"+session.getAttribute("person").toString());
        }


    }

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

重置session

public class ResetSession extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        session.invalidate();
    }

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

或者在web.xml中配置

<session-config>
<!--    单位是分钟-->
    <session-timeout>120</session-timeout>
</session-config>