[关闭]
@nextleaf 2018-09-20T00:37:11.000000Z 字数 2243 阅读 637

2018-09-18 工作日志

JSP Java Servlet cookie session


Cookie

为了辨别用户身份、进行 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

一般:

  1. HTTP/1.1 200 OK
  2. Date: Fri, 04 Feb 2015 21:03:38 GMT
  3. Server: Apache/1.3.9 (UNIX) PHP/4.0b3
  4. Set-Cookie: name=runoob; expires=Friday, 04-Feb-07 22:03:38 GMT;
  5. path=/; domain=runoob.com
  6. Connection: close
  7. Content-Type: text/html


Set-Cookie信息头包含一个键值对,一个GMT(格林尼治标准)时间,一个路径,一个域名。键值对会被编码为URL。有效期域是个指令,告诉浏览器在什么时候之后就可以清除这个cookie。
如果请求路径页面匹配了cookie中的路径和域名,那么浏览器将会重新将这个cookie发回给服务器。浏览器端的信息头长得就像下面这样:

  1. GET / HTTP/1.0
  2. Connection: Keep-Alive
  3. User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
  4. Host: zink.demon.co.uk:1126
  5. Accept: image/gif, */*
  6. Accept-Encoding: gzip
  7. Accept-Language: en
  8. Accept-Charset: iso-8859-1,*,utf-8
  9. Cookie: name=xyz

JSP脚本通过request对象中的getCookies()方法来访问这些cookie,这个方法会返回一个Cookie对象的数组。

  1. Cookie[] cookies = request.getCookies();

Cookie对象中常用的方法

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

使用JSP创建Cookie

  1. 创建一个Cookie对象Cookie cookie = new Cookie("key","value");
    名称和值中都不能包含空格或者如下的字符:[ ] ( ) = , " / ? @ : ;
  2. 设置有效期(以秒为单位)cookie.setMaxAge(60*60*24);
    seconds<0;cookie存在内存中。
    seconds>0;cookie存在硬盘中。
    seconds=0;cookie传到浏览器替换旧的后被删除
    如果不设置过期时间,则会话期间cookie有效(直到关闭浏览器)
    如果浏览器不接受cookie,设置有效期没什么卵用。

  3. 将cookie发送至HTTP响应头中response.addCookie(cookie);

cookie修改:

  1. for (Cookie c : cookies) {
  2. //cookie修改
  3. if (c.getName().equals("huang")) {
  4. c.setValue("昭鸿");
  5. response.addCookie(c);
  6. break;
  7. }
  8. }


未完待续。。。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注