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的过期时间,两种方式
- 通过HttpSession的setMaxInactiveInterval()方法,设置浏览器多久没有请求应用服务器,则 session失效,单位秒
- 也可以是web.xml中设置,单位是分
请注意!!你设置的是session的过期时间,不是cookie在浏览器保存的时间!只要浏览器已关闭,就没有cookie了,也就没有SESSION ID了,即使服务器端容器中的HttpSession对象还存在,也没有意义了!
据说servlet3.0中,有个SessionCookieConfig接口,提供了可以控制cookie的一些方法
网友评论