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() + "<br>");
}

使用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. 隐藏的表单字段
<input type="hidden" name="sessionid" value="12345">

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

  1. URL 重写
  2. HttpSession 对象
    Servlet容器使用HttpSession接口来创建一个 HTTP 客户端和 HTTP 服务器之间的 session 会话。
    通过调用 HttpServletRequest 的公共方法 getSession() 来获取 HttpSession 对象:
//在向客户端发送任何文档内容之前调用 request.getSession()
HttpSession session = request.getSession();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335

推荐阅读更多精彩内容