Servlet——Session管理

Session管理
    用户登录之后,在访问应用程序的其它部分时,不应该再次提示他们登录。应用程序需要记住哪些用户已经登录成功,所以必须能够管理用户Session。
    保持状态的4种方法:网址重写(URL rewriting)、隐藏域、cookie及HttpSession对象。
   
    网址重写
        网址重写是一种Session追踪技术,需要将一个或多个token作为一个查询字符串添加到一个URL种。token的格式一般为键=值:url?key1=value1&key2=value2...&keyn=valuen。URL和token之间用?号隔开,两个token之间用&隔开。
        采用地址重写的缺点如下:
            1.在有些Web浏览器种,URL限制为2000个字符。
            2.仅当有链接要插入值时,值才能转换成后面的资源。
            3.网址重写必须在服务器端有效。
            4.某些字符,例如空格、&符号及问号都必须进行编码。
            5.添加到URL中的信息明显可见。
        由于上述局限性,网址重写只适用于即需要保持,又不跨越太多页面,并且又不太重要的信息。
   
    隐藏域
        利用隐藏域来保持状态,与采用网址重写技术类似。它将值放到HTML表单的隐藏域中。当用户提交表单的时候,隐藏域中的值也传送到服务器。只有当页面包含表单或者可以在页面中添加表单时,才适合使用隐藏域。这种技术胜过网址重写的地方在于,可以将更多的字符传到服务器,并且不需要字符编码。但像网址重写一样,传递的信息不需要跨越太多页面。
       
    cookie
        cookie是自动的在Web服务器和浏览器之间来回传递的小信息块。cookie适用于那些需要跨越许多页面的信息。cookie作为HTTP标头嵌入的,传输过程由HTTP协议处理。可以以根据需要设置cookie的有效期限。对于Web浏览器而言,每台Web服务器最多可以支持20个cookie。
        cookie的不足之处在于用户可以通过修改浏览器的设置来拒绝接受cookie。
        使用cookie,需熟悉java.servlet.http.Cookie类,以及HttpServletRequest和HttpServletResponse接口中的几个方法。
        要创建cookie,传递一个名称和一个值给Cookie类的构造器:Cookie cookie = new Cookie(name,value);。例如选择语言的cookie:new Cookie("language","Italian");。创建Cookie之后,可以设置它的domain、path及maxAge属性,其中maxAge属性决定cookie的有效期限。
        将一个cookie发送到浏览器,需在HttpServletResponse上调用add方法:httpServletResponse.addCookie(cookie);。
        当浏览器再次访问同一资源或者对同一台服务器中的不同资源请求时,它会同时把从Web浏览器处收到的cookie再次传回去。
        要访问浏览器发出的cookie,可以在HttpServletRequest中使用getCookies方法。该方法返回一个Cookie数组,如果请求中没有cookie,则返回null。Cookie[] cookies = request.getCookies();。
        若要删除cookie,需创建一个同名cookie,并将maxAge属性设置为0,最后在HttpServletResponse中添加一个新的cookie。
            Cookie cookie = new Cookie("userName","");
            cookie.setMaxAge(0);
            response.addCookie(cookie);
           
    HttpSession对象
        用户可以没有或有一个HttpSession,并且只能访问自己的HttpSession。
        HttpSession是当一个用户第一次访问某个网站时自动创建的。通过HttpServletRequest中调用getSession方法可以获取用户的HttpSession。
            HttpSession getSession() 返回当前的HttpSession,若无,则创建一个并返回。
            HttpSession getSession(boolean create) 返回当前的HttpSession,若无,为true创建并返回,为false返回null。
        HttpSession的setAttribute方法将一个值放到HttpSession中:void setAttribute(String name,Object object)。
        放到HttpSession中的值保存在内存中,所以只能将尽可能小的对象放在里面,并且数量不能太多。
        Object getAttribute(String name) 获取HttpSession中保存的对象
        Enumeration<String> getAttributeNames() 获取HttpSession中的所有属性
   
posted @ 2019-07-25 16:23  !O0O!  阅读(389)  评论(0)    收藏  举报