美文网首页
2018-09-18

2018-09-18

作者: 黄昭鸿 | 来源:发表于2018-09-18 23:25 被阅读0次

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

相关文章

  • 一丿蓝

    北京 2018-09-18

  • 2018-09-18

    2018-09-16 戴师傅 2018-09-18 2018-09-18 20:32 打开App (稻盛哲学学习会...

  • 晨间日记

    2018-09-18 06:03 · 字数 393 · 阅读 9 · 日记本 Eva肖肖 【20180918 18...

  • (16)纸人妈妈照样生出健康娃

    (16) 纸人妈妈照样生出健康娃 晨小贝 已关注 2018-09-18 17:53 · 字数 1433 · 阅读 ...

  • 懂你L4-U2-1-Vocabulary-Body System

    流利说 D77 2018-09-18 二 学习 Level4-Unit1-Part4*Learning- "Voc...

  • (码友推荐)2018-09-18 .NET及相关开发资讯速递

    (码友推荐)2018-09-18 .NET及相关开发资讯速递: 1.Redis 桌面管理工具 RedisDeskt...

  • 2018-09-18

    2018-09-18 工作日志 Cookie为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数...

  • 2018-09-20

    方正证券所长助理马军饭局被拍事件始末 (2018-09-18 13:11:41) 今天,方正证券所长助理兼通信行业...

  • DAL 今日职位讨论快报 113

    #13 2018-09-18 今天分享的职位来自 Adobe,熟悉作图剪片子绘画的同学肯定都曾经或多或少给 Ado...

  • 克服萧条的五项对策

    2018-09-18 (稻盛哲学学习会)打卡第158天 姓名:王燕君 部门:分水碶 组别:利他三组 【知~学习】 ...

网友评论

      本文标题:2018-09-18

      本文链接:https://www.haomeiwen.com/subject/jotbnftx.html