@nextleaf
2018-09-20T00:37:11.000000Z
字数 2243
阅读 644
JSP
Java
Servlet
cookie
session
为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据
Cookie 通常设置在 HTTP 头信息中(虽然 JavaScript 也可以直接在浏览器上设置一个 Cookie)
默认响应头示例:
Content-Length:170
Content-Type:text/html;charset=UTF-8
Date:Tue, 18 Sep 2018 08:39:04 GMT
Set-Cookie
:JSESSIONID=F10C53BE604986FBCE3…B7; Path=/cookieweb(这是应用名); HttpOnly
注:
JSESSIONID ==request.getSession().getId()
故即使浏览器禁用cookie,服务器也能使用session
一般:
HTTP/1.1 200 OK
Date: Fri, 04 Feb 2015 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=runoob; expires=Friday, 04-Feb-07 22:03:38 GMT;
path=/; domain=runoob.com
Connection: close
Content-Type: text/html
。
Set-Cookie
信息头包含一个键值对,一个GMT(格林尼治标准)时间,一个路径,一个域名。键值对会被编码
为URL。有效期域是个指令,告诉浏览器在什么时候之后
就可以清除这个cookie。
如果请求路径页面匹配了cookie中的路径和域名,那么浏览器将会重新将这个cookie发回给服务器。浏览器端的信息头长得就像下面这样:
GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz
JSP脚本通过request对象中的getCookies()方法来访问这些cookie,这个方法会返回一个Cookie对象的数组。
Cookie[] cookies = request.getCookies();
public void setDomain(String pattern)
设置cookie的域名,默认cookie的域是当前域名
public String getDomain()
获取cookie的域名
public void setMaxAge(int expiry)
设置cookie有效期,以秒为单位,默认有效期为当前session的存活时间
public int getMaxAge()
获取cookie有效期,以秒为单位,默认为-1 ,表明cookie会活到浏览器关闭为止
public String getName()
返回 cookie的名称,名称创建后将不能被修改
public void setValue(String newValue)
设置 cookie的值
public String getValue()
获取cookie的值
public void setPath(String uri)
设置cookie的路径,默认为当前页面目录下的所有URL,还有此目录下的所有子目录
什么时候发送cookie? 当请求的路径等于cookie的路径,或者是cookie路径的子路径时才会发送。
某个cookie路径设置为根路径后,浏览器对所有路径(页面)的请求都发送该cookie(同一个会话中)。
public String getPath()
获取cookie 的路径
public void setSecure(boolean flag)
指明cookie是否要加密传输
public void setComment(String purpose)
设置注释描述 cookie的目的。当浏览器将cookie展现给用户时,注释将会变得非常有用
public String getComment()
返回描述cookie目的的注释,若没有则返回null
Cookie cookie = new Cookie("key","value");
。 [ ] ( ) = , " / ? @ : ;
设置有效期(以秒为单位)cookie.setMaxAge(60*60*24);
seconds<0;cookie存在内存中。
seconds>0;cookie存在硬盘中。
seconds=0;cookie传到浏览器替换旧的后被删除
如果不设置过期时间,则会话期间cookie有效(直到关闭浏览器)
如果浏览器不接受cookie,设置有效期没什么卵用。
将cookie发送至HTTP响应头中response.addCookie(cookie);
for (Cookie c : cookies) {
//cookie修改
if (c.getName().equals("huang")) {
c.setValue("昭鸿");
response.addCookie(c);
break;
}
}
。
未完待续。。。