2018-09-18

2018-09-18 工作日志


Cookie
为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据

上午

JSP Cookie 处理

Cookie 通常设置在 HTTP 头信息中(虽然 JavaScript 也可以直接在浏览器上设置一个 Cookie)

默认响应头示例:

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()

一般

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();

Cookie对象中常用的方法

//设置cookie的域名
public void setDomain(String pattern)
//获取cookie的域名
public String getDomain()
//设置cookie有效期,以秒为单位,默认有效期为当前session的存活时间
public void setMaxAge(int expiry)
//获取cookie有效期,以秒为单位,**默认为-1** ,表明cookie会活到浏览器关闭为止
public int getMaxAge()
//返回 cookie的名称,名称创建后将不能被修改
public String getName()
//设置 cookie的值
public void setValue(String newValue)
//获取cookie的值
public String getValue()
//设置cookie的路径,默认为当前页面目录下的所有URL,还有此目录下的所有子目录
public void setPath(String uri)
//什么时候发送cookie?    当请求的路径等于cookie的路径,或者是cookie路径的子路径时才会发送。
//某个cookie路径设置为根路径后,浏览器对所有路径(页面)的请求都发送该cookie(同一个会话中)。
//获取cookie 的路径
public String getPath()
//指明cookie是否要加密传输
public void setSecure(boolean flag)
//设置注释描述 cookie的目的。当浏览器将cookie展现给用户时,注释将会变得非常有用
public void setComment(String purpose)
//返回描述cookie目的的注释,若没有则返回null
public String getComment()

使用JSP创建Cookie

  1. 创建一个Cookie对象
Cookie cookie = new Cookie("key","value");

名称和值中都不能包含空格或者如下的字符:[ ] ( ) = , " / ? @ : ;

  1. 设置有效期(以秒为单位)
cookie.setMaxAge(60*60*24);
seconds<0;cookie存在内存中。
seconds>0;cookie存在硬盘中。

如果不设置过期时间,则会话期间cookie有效(直到关闭浏览器)

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

cookie修改:

//cookie修改
for (Cookie c : cookies) {
    if (c.getName().equals("huang")) {
        c.setValue("昭鸿");
        response.addCookie(c);
        break;
    }
}

使用 JSP 读取 Cookie

//String str= URLEncoder.encode("中文","utf-8");
Cookie[] cookies = request.getCookies();
if (cookies != null) {
    for (Cookie cooky : cookies) {
        out.print(cooky.getName() + ":" + cooky.getValue() + "
"); }

使用JSP删除Cookie

  1. 获取一个已经存在的cookie。
  2. 将cookie的有效期设置为0。
  3. 将这个cookie重新添加进响应头中。

第二次运行该页面时,名为“huang”的cookie不见了。

 Cookie[] cookies = request.getCookies();
//cookie删除
for (Cookie c : cookies) {
    if (c.getName().equals("huang")) {
        //修改生命时间
        c.setMaxAge(0);
        response.addCookie(c);
        break;
    }
}

下午

cookie的路径

在默认情况下,只有与创建 cookie 的页面处于同一个目录或在创建cookie页面的子目录下的网页才可以访问。
cookie路径的作用是决定浏览器访问服务器的某个资源时,需要将浏览器端保存的那些Cookie归还给服务器

session

一类用来在客户端和服务器之间保持状态的解决方案
[术语session][1]

Servlet Session维持方式

  1. cookie
    一个 Web 服务器可以分配一个唯一的 session 会话 ID(上述的JSESSIONID)作为每个 Web 客户端的 cookie,对于客户端的后续请求可以使用接收到的 cookie 来识别。
  2. 隐藏的表单字段

但是点击常规的超文本链接()不会导致表单提交

  1. URL 重写
  2. HttpSession 对象
    Servlet容器使用HttpSession接口来创建一个 HTTP 客户端和 HTTP 服务器之间的 session 会话。
    通过调用 HttpServletRequest 的公共方法 getSession() 来获取 HttpSession 对象:
//在向客户端发送任何文档内容之前调用 request.getSession()
HttpSession session = request.getSession();

你可能感兴趣的:(2018-09-18)