java笔记2-servlet-会话管理

2017-02-21  本文已影响39人  arkulo

cookie增删改查

Cookie cookie = new Cookie("username","arkulo");
cookie.setMaxAge(7*24*60*60);单位是秒,一星期内有效
response.setCookie(cookie);

Cookie[] cookies = request.getCookies();
if(cookies != null)
{
  for(Cookie ck:cookies)
  {
    String name = ck.getName();
    String value = ck.getValue();
  }
}

改(除了value,MaxAge其它都应该保持不变,负责浏览器会认为不是同一个cookie)

for(Cookie cookie : cookies){
     if(cookie.getName().equals(name)){
          System.out.println("原值为:"+cookie.getValue());
          cookie.setValue(value);
          cookie.setMaxAge(30 * 60);// 设置为30min
          response.addCookie(cookie);
     }
}

删除

 for(Cookie cookie : cookies){
       if(cookie.getName().equals(name)){
             cookie.setValue(null);
             cookie.setMaxAge(0);// 立即销毁cookie
             cookie.setPath("/");
             response.addCookie(cookie);
        }
}

session增删改查

通过HttpServletRequest的getSession()方法能够取得HttpSession对象,这个对象最关键的三个函数就是:

setAttrbute() 添加或修改session
getAttrbute() 查询session
invalidate() 销毁session

HttpSession是非线程安全的,所以必须注意属性设定时共享存取的问题

------------说说SESSION ID的事情------------

Paste_Image.png

在web容器中,会有很多个HttpSession实例(是web容器的一个java对象),HttpSession中存放的属性,自然也就存放于服务器端的web容器之中,每一个SESSION ID都有一个特殊的SESSION ID(默认用浏览器的cookie保存),当浏览器请求应用程序时,会将cookie中存放的SESSION ID一并发给应用程序,web容器会根据SESSION ID来找出对应的HttpSession对象,然后供用户getSession()。但是保存SESSION ID的这个cookie默认是关闭浏览器就失效,但是这时候服务器端容器中的HttpSession对象可还是存在的
我们可以设置session的过期时间,两种方式

Paste_Image.png

请注意!!你设置的是session的过期时间,不是cookie在浏览器保存的时间!只要浏览器已关闭,就没有cookie了,也就没有SESSION ID了,即使服务器端容器中的HttpSession对象还存在,也没有意义了!

据说servlet3.0中,有个SessionCookieConfig接口,提供了可以控制cookie的一些方法

上一篇 下一篇

猜你喜欢

热点阅读