Cookie学习

1-Cookie学习

目前大家对于浏览器和服务器的交互模式,以及请求的处理都有了理解,并且也能够进行请求的处理。本节课围绕整个流程再次进行技术优化,重点学习Cookie 技术,此技术的应用面是非常广的。

Cookie学习

问题:

HTTP 协议是没有记忆功能的,一次请求结束后,相关数据会被销毁。如果第二次的请求需要使用相同的请求数据怎么办呢? 难道是让用户再次请求书写吗?

解决:

使用Cookie 技术解释:

Cookie 技术其实是浏览器端的数据存储技术,解决了不同请求需要使用相同的请求数据的问题。我们把请求需要共享的请求数据,存储在浏览器端,避免用户进行重复的书写请求数据。但是哪些数据需要使用Cookie 技术存储起来是一个主观问题,需要在后台进行响应的时候来告诉浏览器,有些数据其他请求还会使用,需要存储起来。

特点:

浏览器端的数据存储技术

适合少量数据键值对

1次请求加响应

请求:客户端 ---》  服务器

响应:服务器 ---》响应内容包含(set-cookie:userType-》VIP)

2次请求

请求:客户端(浏览器判断是否有有效期内的cookie)将cookie发送给到 ---》 服务器

响应:服务器获取cookie,判断是否是vip用户 ---》相应内容给到客户端(并且可以添加新cookie或者修改原来的cookie)

Cookie 数据存储

临时存储:

不设置cookie 信息的存储时间,周期为一次会话, 存储在浏览器内存中

定时存储:

设置存储时间,周期为时间设置,存储在用户电脑中。

Servlet Cookie 处理

Cookie 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。Java Servlet 显然支持 HTTP Cookie。

识别返回用户包括三个步骤:

1、服务器脚本向浏览器发送一组 Cookie。例如:姓名、年龄或识别号码等。

2、浏览器将这些信息存储在本地计算机上,以备将来使用。

3、当下一次浏览器向 Web 服务器发送任何请求时,浏览器会把这些 Cookie 信息发送到服务器,服务器将使用这些信息来识别用户。

Servlet Cookie 处理需要对中文进行编码与解码,方法如下:


String  str   =   java.net.URLEncoder.encode("中文","UTF-8");        //编码

String  str   =   java.net.URLDecoder.decode("编码后的字符串","UTF-8");// 解码

Javascript


encodeURI() //路径编码函数

decodeURI() //路径解码函数

Cookie 剖析

Cookie 通常设置在 HTTP 头信息中(虽然 JavaScript 也可以直接在浏览器上设置一个 Cookie)。设置 Cookie 的 Servlet 会发送如下的头信息:


HTTP/1.1 200 OK

Date: Fri, 04 Feb 2000 21:03:38 GMT

Server: Apache/1.3.9 (UNIX) PHP/4.0b3

Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT;

path=/; domain=m.baidu.com

Connection: close

Content-Type: text/html

Set-Cookie 头包含了一个名称值对、一个 GMT 日期、一个路径和一个域。名称和值会被 URL 编码。expires 字段是一个指令,告诉浏览器在给定的时间和日期之后"忘记"该 Cookie。

如果浏览器被配置为存储 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

Servlet 就能够通过请求方法 request.getCookies() 访问 Cookie,该方法将返回一个 Cookie 对象的数组。

Servlet Cookie 方法

以下是在 Servlet 中操作 Cookie 时可使用的有用的方法列表。

方法 & 描述

public void setMaxAge(int expiry)

该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。

public int getMaxAge()

该方法返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示,没有设定值。

public String getName()

该方法返回 cookie 的名称。名称在创建后不能改变。

public void setValue(String newValue)

该方法设置与 cookie 关联的值。

public String getValue()

该方法获取与 cookie 关联的值。

public void setSecure(boolean flag)

该方法设置布尔值,表示 cookie 是否应该只在加密的(即 SSL)连接上发送。

public void setComment(String purpose)

设置cookie的注释。该注释在浏览器向用户呈现 cookie 时非常有用。

public String getComment()

获取 cookie 的注释,如果 cookie 没有注释则返回 null。

通过 Servlet 设置 Cookie

通过 Servlet 设置 Cookie 包括三个步骤:

(1) 创建一个 Cookie 对象:您可以调用带有 cookie 名称和 cookie 值的 Cookie 构造函数,cookie 名称和 cookie 值都是字符串。


Cookie cookie = new Cookie("key","value");

请记住,无论是名字还是值,都不应该包含空格或以下任何字符:

[ ] ( ) = , " / ? @ : ;

(2) 设置最大生存周期:您可以使用 setMaxAge 方法来指定 cookie 能够保持有效的时间(以秒为单位)。下面将设置一个最长有效期为 24 小时的 cookie。


cookie.setMaxAge(60*60*24);

(3) 发送 Cookie 到 HTTP 响应头:您可以使用 response.addCookie 来添加 HTTP 响应头中的 Cookie,如下所示:


response.addCookie(cookie);

通过 Servlet 读取 Cookie

要读取 Cookie,您需要通过调用 HttpServletRequest 的 getCookies( ) 方法创建一个 javax.servlet.http.Cookie 对象的数组。然后循环遍历数组,并使用 getName() 和 getValue() 方法来访问每个 cookie 和关联的值。

通过 Servlet 删除 Cookie

删除 Cookie 是非常简单的。如果您想删除一个 cookie,那么您只需要按照以下三个步骤进行:

1、读取一个现有的 cookie,并把它存储在 Cookie 对象中。

2、使用 setMaxAge() 方法设置 cookie 的年龄为零,来删除现有的 cookie。

3、把这个 cookie 添加到响应头。

原文地址:https://www.cnblogs.com/qq308015824/p/11020436.html

时间: 2024-08-30 00:20:57

Cookie学习的相关文章

Cookie学习-------介绍

什么是 Cookie? Cookie是存储于访问者计算机中的变量. Cookie是Web服务器保存在用户计算机上等的文本文件的小块用户信息,每当用户访问Web服务器时,保存在用户计算机上的相关Cookie由客户端读取到服务器端,服务器端根据Cookie信息为用户制定服务. 例如:访问某个网站时在页面中体现用户登录次数等. Cookie的语法 set-Cookie:name=value;[exprise=date];[path=dir];[domain=domainname];[secure] C

Cookie学习笔记(三)

11.4.3  删除会话变量 在使用会话时,需要创建一个方法来删除会话数据.在当前示例中,当用户注销时,这是必要的. 虽然cookie系统只需要发送另一个cookie来销毁现有的cookie,但是会话的要求更高,因为既要考虑客户上的cookie,又要考虑服务器上的数据. 要删除单独一个会话变量,可以使用unset()函数(它可以处理PHP中的任何变量): unset($_SESSION['var']); 要删除每个会话变量,可以重置整个$_SESSION数组: $_SESSION = array

Cookie学习笔记(一)

Cookie 简介 一.简介     说起来,Cookie应该是一种应用较久的技术了.早在HTML刚刚出现的时候,在每个独立的页面之间没有办法记录和 标识不同的用户.后来人们就发明了Cookie技术,当用户访问网页时,它能够在访问者的机器上创立一个文件,我们把它叫作Cookie,写一段内容进去,来标识不同的用户.如果下次用户再访问这个网页的时候,它又能够读出这个文件里面的内容,这样网页就知道上次这个用户已经访问过该网页了.      虽然现在网页的制作技术比起几年以前已经发展了许多.不过有些时候

iOS Cookie学习(NSHTTPCookieStorage的使用)

最近也是忙里偷闲,无意中发现了一位大牛的文章,小小的研究了一下HTTP.今天先写一点Cookie,之前有过文章都是关于Cookie的,也没有深入研究,今天也算是一起学习吧. @interface FQWebGlobalCookies : NSObject /* 全局单例 */ + (id)globalCookiesManager; /* 对每份URL产生的Cookie 保存起来,以便管理 对响应头域中的cookie进行保存 */ - (void)storeResponseCookies:(NSD

Cookie学习笔记二:Cookie实例

今天说说刚刚学到的两个Cookie的最经典应用:自动登录和购物车设置 一:自动登录 需要两个页面:login.jsp与index.jsp,login.jsp用来输出登录信息,index.jsp处理登录信息:如果有Cookie,则自动登录,否则创建输入信息的对象的Cookie,下次登录可以直接登录,但是我们在这里给Cookie设置一个最大保存时间30s,即登录30s后会自动退回到登陆页面,具体代码如下: login.jsp: <%@ page language="java" con

HTTP Cookie学习

Cookie简介: Cookie(复数形态Cookies),中文名称为小型文本文件或小甜饼,指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密).定义于RFC2109.是网景公司的前雇员Lou Montulli在1993年3月的发明. 概念:Cookie是web server下发给浏览器的任意的一段文本.在后续的http 请求中,浏览器会将cookie带回给Web Server. Cookie作用: 因为HTTP协议是无状态的,即服务器不知道用户上一次

HTTP Cookie学习笔记

cookie是什么?是饼干,小甜点? No! No! No! 我今天要总结的cookie并不是你所想的小甜心,我这里要说的cookie是Web开发中的一个重要的"武器",每一个Web开发者的武器库中肯定要装备这门武器. cookie是浏览器存储在用户电脑上的一个文本文件,里面包含一些key=value格式的数据:浏览器按照一定的规范来管理和存储这些数据,并在之后的请求中将这些信息发送至服务器,服务器根据客户端传回的cookie数据进行用户识别.用户行为分析等操作.千言万语总结成一句话,

Cookie学习笔记

会话的概念: 打开浏览器,输入正确的URL访问服务器, 期间浏览器向服务器请求资源,服务器给予资源响应,最后关闭浏览器,客户端和浏览器的连接断开.这一过程可理解为会话. Cookie入门: Cookie是在服务器创建,保存在客户端.Cookie会在客户端保存一些用户的信心,比如浏览信息.在客户端没有删除一个站点的Cookie情况下,在下一次在访问该站点的时候会在请求头中带有Cookie信息发给服务器,以便于服务端做出更为合理的处理. 每个网站只能读取自己的Cookie,不能读取别的网站的Cook

js Cookie 学习笔记

<1>设置cookie <script type="text/javascript"> window.onload=function(){ document.cookie="myName=C_world"; } <script> <2>获取cookie <script type="text/javascript"> window.onload=function(){ var myName