javaweb学习(6)--Session

Posted by lizhao on 09-16,2016

Session

    和cookie类似,但是session是保存在服务器端的缓存
    给当前的浏览器窗口赋一个id,这个sessionId就是这块缓存的值。
    如果当前浏览器支持cookie,则会保存这个id到cookie里面,每次调用的时候就会从cookie里面取出这个值,然后访问服务器。
    如果浏览器不支持cookie,则需要通过URL重写的方式,会在地址后面加上session(resp.encodeURL())。
    只要是 同一个窗口下&&同一app 下的servlet和jsp都共享同一个session

下面贴代码:
主要有几个地方注意的就是下面获取session主要是2种途径,一种是在cookie里面获取,一种是在URL里面重写。
后面添加了往session里面写东西的代码

//请求地址http://localhost:8080/test/SessionInfoServlet
public class SessionInfoServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession mSession = req.getSession(true);    
        resp.setContentType("text/html");
        PrintWriter writer = resp.getWriter();
        writer.println("<html>");
        writer.println("<head>");
        writer.println("<title>Session信息</title>");
        writer.println("</head>");
        writer.println("<body>");

        //访问的时候就有cookie,这时候查看他的信息
        writer.println("<h3>Session infomation</h3>");
        writer.println("new Session: "+ mSession.isNew());
        writer.println("<br /> Session ID: " + mSession.getId());
        writer.println("<br /> Session created time: " + 
                new java.util.Date(mSession.getCreationTime()));
        writer.println("<br /> Session Accessed  time: " + 
                new java.util.Date(mSession.getLastAccessedTime()));

        //请求时候的session
        writer.println("<h3>request infomation</h3>");
        writer.println("<br /> Session ID from request: " + req.getRequestedSessionId());
        writer.println("<br /> Session via cookie: " + req.isRequestedSessionIdFromCookie());
        writer.println("<br /> Session via url: " + req.isRequestedSessionIdFromURL());
        writer.println("<br /> Valid Session ID: " + req.isRequestedSessionIdValid());

        //使用cookie,获取session
        writer.println("<br /> <a href=\"SessionInfoServlet\">refresh</a>");
        //使用URL重写的方式
        //writer.println("<br /> <a href=" +resp.encodeRedirectURL("SessionInfoServlet")+ ">refresh</a>");

        //往session里面写东西,一般是键值对
        Integer accessCount = (Integer) mSession.getAttribute("accessCount");
        if(accessCount==null){
            accessCount=new Integer(0);
        }else{
            accessCount=new Integer(accessCount.intValue()+1);
        }
        mSession.setAttribute("accessCount", accessCount);
        writer.println("<h3>accessCount:"+accessCount+"</h3>");

        writer.println("</body></html>");
        writer.close();
    }
}