`
VincentZheng
  • 浏览: 51542 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

【读书笔记】Web前端开发必须了解的Cookie

阅读更多
定义:Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。

作用:

1. 目前Cookies 最广泛的是记录用户登录信息,这样下次访问时可以不需要输入自己的用户名、密码了。

2. 网站可以利用cookies跟踪统计用户访问该网站的习惯,比如什么时间访问,访问了哪些页面,在每个网页的停留时间等。利用这些信息,一方面是可以为用户提供个性化的服务,另一方面,也可以作为了解所有用户行为的工具,对于网站经营策略的改进有一定参考价值。例如,你在某家航空公司站点查阅航班时刻表,该网站可能就创建了包含你旅行计划的Cookies,也可能它只记录了你在该站点上曾经访问过的Web页,在你下次访问时,网站根据你的情况对显示的内容进行调整,将你所感兴趣的内容放在前列。这是高级的Cookie应用。

另外,有人认为网站利用cookies可能存在侵犯用户隐私的问题,但由于大多用户对此了解不多,而且这种对用户个人信息的利用多数作为统计数据之用,不一定造成用户的直接损失,因此现在对于cookies与用户隐私权的问题并没有相关法律约束,很多网站仍然在利用cookie跟踪用户行为,有些程序要求用户必须开启cookie才能正常应用。IE浏览器用户可以通过"隐私"选项中的隐私设置的高低来决定是否允许网站利用cookie跟踪自己的信息,从全部限制到全部允许,或者限制部分网站,也可以通过手动方式对具体的网站设置允许或者禁止使用cookies进行编辑。IE浏览器的默认设置是 "中级"-对部分网站利用cookie有限制。个人电脑的cookies设置(对IE浏览器而言)可通过菜单"工具-Internet选项-隐私"来查看和修改。

Cookie的传递:

首先,Cookie是利用了网页代码中的HTTP头信息进行传递的,浏览器的每一次网页请求,都可以伴随Cookie传递。

需要说明的是,HTTP头信息又分为HTTP请求头和HTTP响应头——顾名思义,应该都不用解释。这些HTTP头信息包含许多键值对,全都是以"键:值"的形式来保存及传递的。对于Cookie来说,在服务器端进行读取Cookie时以"Cookie"为键由客户端发送到服务器端,也就是说,以"Cookie"为键发送HTTP请求头;而在服务器端我们进行处理后,如果对Cookie有改动,则将以"Set-Cookie"为键发送HTTP响应头由服务器端传送回客户端,比如新增加cookie,删除cookie(即将cookie中的属性expires设为当面当前时间)。

Cookie的属性:

1. expires(Cookie的失效期)

2. path(关联到cookie的路径,默认为/。默认情况下,cookie会和创建它的网页以及与这个网页处于同一个目录下的网页和处于该目录的子目录下的网页关联。例如,如果一个cookie由位于http://www.163.com/news/index.html的网页创建,那么它对位于http://www.163.com/news/order.html和位于http://www.163.com/news/validate/index.html的网页也是可见的,但是对于位于http://www.163.com/lottery/index.html的网页就不可见了。)

3. domain(设置关联cookie的域名。默认情况下,只有和设置cookie的网页来自同一web服务器的页面才能访问这个cookie。但是,大的网站可能需要由多个web服务器共享cookie。例如,位于talk.test.com的服务器就可能读取info.test.com设置的cookie值。这里就引入了第三个cookie属性domain。将定由位于talk.test.com的页面创建的cookie把自己的path属性设置成"/",把domain设置成了".test.com",那么所有位于info.test.com的页面和所有位于talk.test.com的页面以及所有位于test.com域的其他服务器上的网页都能够访问这个cookie。如果没有设置cookie的domain值,该属性的默认值就是创建cookie的网页所在的服务器的主机名。注意,不能将一个cookie的域设置成服务器所在的域之外的域。)

4. secure,values,value,name....

值得注意的是Cookie有个expires的属性,而HTTP头信息中也包含有expires这个属性。前者只是决定Cookie的失效期,而后者expires是键,用于控制请求文件的有效时间,当请求数据在有效期内时客户端浏览器从缓存请求数据而不是服务器端;当缓存中数据失效或过期,才决定从服务器更新数据。可以使用Apache的mod_expires模块来设置,可以控制应答时的Expires头内容和Cache-Control头的max-age指令,当设置了expires后,会自动输出Cache-Control的max-age信息,这个数值是expires有效期内的秒数。

以下为HTTP头信息实例:


引用
1. HTTP 请求消息头部实例:
Host:rss.sina.com.cn
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
Accept:text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language:zh-cn,zh;q=0.5
Accept-Encoding:gzip,deflate
Accept-Charset:gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive:300
Connection:keep-alive
Cookie= "7i24LINKGATE=12403433566263x1173026144x12403433879953;   domain=sina.com;   path=/ ";      <-- Cookie
If-Modified-Since:Sun, 01 Jun 2008 12:05:30 GMT
Cache-Control:max-age=0

2. HTTP 响应消息头部实例:
Status:OK - 200                                                <-- 响应状态码,表示 web 服务器处理的结果。
Date:Sun, 01 Jun 2008 12:35:47 GMT
Server:Apache/2.0.61 (Unix)
Last-Modified:Sun, 01 Jun 2008 12:35:30 GMT
Accept-Ranges:bytes
Content-Length:18616
Cache-Control:max-age=120
Expires:Sun, 01 Jun 2008 12:37:47 GMT
Content-Type:application/xml
Age:2
X-Cache:HIT from 236-41.D07071951.sina.com.cn                  <-- 反向代理服务器使用的 HTTP 头部
Set-Cookie:   7i24LINKGATE=1251903217940x1173027775x1251949947438;   domain=sina.com;   path=/
Via:1.0 236-41.D07071951.sina.com.cn:80 (squid/2.6.STABLE13)
Connection:close


Cookie的操作及处理:

对于不同的技术来说,处理的方式及方法各不相同,比如在Javascript,PHP,JSP,Java,C#中处理。那只是每种语言定义的API不同而已,只要理解了要达到的目的,具体实现的方法可在各自关于Cookie的操作里查询。写到这里,怎么感觉编程真的就同"面向对象"密不可分了呢:只要达到目的,管你怎么实现的,呵呵。
分享到:
评论

相关推荐

    web前端开发AJAX学习笔记

    web前端开发AJAX学习笔记

    吴天雄--JavaWeb完整笔记.doc

    模块二:使用eclipse和idea快速开发jsp(idea和tomcat的相关配置、eclipse创建web项目、jsp页面元素、jsp九大内置对象、四大作用域对象、解决get/post请求乱码问题、cookie和session详解、请求重定向);模块三:...

    web_knowledge

    Hanyulo Web开发个人笔记这是什么这是一个仓库,它记录了我作为前端开发人员所学的知识。 基本上,开发一个良好的网站可能需要了解的所有知识。 这不仅让我进行审查,而且还可以帮助我准备将来的面试。 我也想与任何...

    nightlife-server:Freecodecamp动态Web应用程序项目

    在分开开发前端和后端时,必须启用 。 安装cors软件包以进行处理。 如果要与请求一起发送凭据,还请在cors()设置{ credentials: true, origin: true } cors() { credentials: true, origin: true }选项。 npm ...

    notes-frontend:使用React的Notes Web应用

    笔记 介绍 记笔记的最简单方法! 管理您的笔记。 轻松添加,查看,编辑或删除它们。... :Node.js的Web框架:使用Cookie :针对现代应用程序的全球云数据库服务 :用于Node.js的优雅,简单的MongoDB对象建模

    notes:前端相关笔记记录。更好的记录是为了更好的工(mo)作(yu)。从入门到入土

    web-notes 记录前端相关相关知识点,自己所理解的知识点 CSS JS localStorage、sessionStorage和cookie 普通函数和箭头函数的区别 浅拷贝和深拷贝 webpack不完全配置 webpack编译原理 axios请求重试和取消重复请求 ...

    LearnFrontEnd:清理前端概念

    学习前端阅读本文之前您当前正在移动或添加笔记。 目录的顺序尚未排序,甚至同一语言的概念也可能被弄乱。 由于这是您正在研究的概念,因此我尝试将其基于准确的事实,但也许并非如此。 请与其他材料进行比较。 我们...

    Appointio:在您租房之前浏览公寓并安排一次旅行。 使用 ReactRedux 和 Rails 后端构建

    预约(前端) 在您租房之前浏览公寓并安排一次旅行。 使用 React/Redux 和构建。 ·· 目录 入门 先决条件 安装 用法 运行测试 ...笔记 ... 这是一个使用 React/Redux(前端... 您必须在浏览器中启用第三方 cookie,否则您将

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ 淘淘商城第一天笔记.docx │ ├─02.第二天 │ 07.商品类目选择完成.avi │ 01.课程计划.avi │ 02.展示首页.avi │ 03.分页插件01.avi │ 04.分页插件的使用方法.avi │ 05.商品列表展示.avi │ 06.商品类目...

    JavaScript笔记

    也是一种广泛应用于客户端Web开发的脚本语言) 基于对象:网页中的一切元素都是假象!不需要new,即可直接使用 事件驱动:JavaScript的执行都是由事件引发 解释执行:先读到的先执行,后读到的会替代先读的 可以...

    bojue.github.io:博客首先是给自己看的

    Cookie机制 前端鉴权 Web浏览器缓存机制 HTTP报文详解 HTTP握手以及TCP标示位详情 网站加载Waiting (TTFB) 优化 框架 理解zone.js Angular7升级到8 angular 版本新特性 Vue响应式原理 算法 Excel行列解析算法 ...

    gaia-email:独立的 gaia 电子邮件应用程序

    前端笔记 电子邮件前端代码动态加载每个卡片实现,并使用缓存在文档 cookie 中的 HTML 作为启动的一部分。 缓存的 HTML 仅用于用户在启动应用程序时将看到的第一张卡片。 通过使用缓存的 HTML,它可以在 UI 和后端...

Global site tag (gtag.js) - Google Analytics