一、生活中的cookie
无论你知不知道Cookie是什么,在你的生活中,肯定有使用过它。还记得你使用浏览器浏览网页时,当你要登陆时,网页上有一个记住密码或自动登陆的选项,当你选择时,你就使用了Cookie。那么在下次访问该网站时,你可能就已经自动地登陆了,而不需要从重输入用户名和密码,至于它是怎么实现的,我们在下面说明。
 
为什么会有Cookie的存在?在前一篇文章,我们讲过,HTTP服务器是无状态的,即它不会记录任何的用户和连接信息。而一个Web站点通常希望能够识别用户,既可能是因为服务器想限制用户的访问,或可能是因为它想把内容与用户身份关联起来。为此,HTTP使用了cookie,它可以跟踪用户。
 
二、cookie技术的组成
在了解cookie的工作原理之前,我们先来了解一下cookie技术的组成,它由4部分组成,如下:
(1)在HTTP响应报文中有一个cookie首部行;
(2)在HTTP请求报文中有一个cookie首部行;
(3)在用户端系统中保留有一个cookie文件,由用户浏览器管理;
(4)在Web站点有一个后端数据库;
 
三、cookie的工作原理
在了解了cookie技术的组成之后,我们来看看cookie是怎么工作的。下面就以主机A中的浏览器访问网站xxx作为例子来分析cookie的工作原理吧。
 
首先主机A使用浏览器上网,当主机A第一次访问xxx网站时,当请求报文到达xxx的Web服务器时,该Web服务器将产生一个唯一识别码(例如:12345),并以此作为索引在它的后端数据库中产生一个表项,并用Set-cookie:首部行和刚才产生的值为设置HTTP响应报文的首部。这样在HTTP响应报文的首部,我们就可以看到这样的一个首部行——Set-cookie: 12345.
 
当主机A的浏览器收到该HTTP响应报文时,它会看到Set-cookie:首部,然后浏览器在它的本地cookie文件上加入一行,其中包括Set-cookie:首部行中的识别码。
 
由于主机A的cookie文件已经有了用于xxx网站的表项,因此当主机A的浏览器继续浏览xxx网站时,每请求一个Web页面,其浏览器就会从它的cookie文件中获取到xxx网站的识别码,并放入HTTP请求报文中cookie首部行中,即加入了首部行Cookie: 12345。
 
当xxx网站的服务器收到该包含Cookie首部行的HTTP请求报文后,服务器通过查询后端服务器,确定cookie标识码对应的用户,从而可以直接知道用户的信息(即知道确实有一个这样的用户,不久前登陆过该网站)。
 
注意,在cookie的方式下,xxx网站的服务器可以跟踪主机A在该站点的活动,xxx Web站点并不需要知道主机A的用户是谁,但是,它确切地知道用户12345访问了哪些页面,按照什么顺序,在什么时间。
 
简单点来说,cookie用于标识用户,用户首次访问站点时,可能需要提供一个用户标识,但在后继的访问中,浏览器向服务器传递一个cookie首部,供服务器识别该用户。因此cookie可以在无状态的HTTP上建立一个用户会话层,允许服务器通过用户与应用程序之间的会话对用户进行验证。
 
四、cookie带来的问题
 
然而,cookie的使用可能会带来一定的问题。
第一,就是用户的隐私问题,从上面的讨论中,我们可以看到,网站能过我们的cookie识别号,可以知道我们在什么时候做过什么事情。
 
第二,就是信息的安全问题,从上面的论述中,我们可以知道,服务器并没有进行必要的检查,即服务器取出包含Cookie首部行的请求报文的cookie识别号,再到后端服务器查询,就能确定用户,而不管这个请求报文是否是由原本的主机发送的报文。换句话来说,如果不怀好意的人,拿到了我们的cookie识别号,并用我们的cookie标识号填充HTTP请求报文,发送给xxx网站的Web服务器,就能冒充我们去做很多他想做的事情,获得很多他们想获得的信息。

计算机网络应用层之cookie的更多相关文章

  1. [计算机网络-应用层] HTTP协议

    1.HTTP概况 Web的应用层协议是超文本传输协议(HTTP),它是Web的核心. HTTP由两部分程序实现:一个客户机程序和一个服务器程序,它们运行在不同的端系统中,通过交换HTTP报文进行对话. ...

  2. 计算机网络-应用层(5)P2P应用

    P2P系统的索引:信息到节点位置(IP地址+端口号)的映射 在文件共享(如电驴中):利用索引动态跟踪节点所共享的文件的位置.节点需要告诉索引它拥有哪些文件.节点搜索索引从而获知能够得到哪些文件 在即时 ...

  3. 计算机网络-应用层之HTTP协议

    1.概念 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写:HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等). ...

  4. 计算机网络(6): http cookie

    Cookie作用: 1)帮助管理用户会话信息(用户需要记录的信息:登陆状态等) 2)跟踪浏览器的行为 3)用户自定义设置 实现方式: 当用户浏览带有Cookie的网站时,网站自动为其生成一个唯一的标志 ...

  5. 计算机网络-应用层(4)DNS协议

    域名系统(Domain Name System, DNS):一个分层的由DNS服务器实现的分布式数据库+一个使得主机能够查询分布式数据库的应用层协议 DNS服务器通常是运行BIND (Berkeley ...

  6. 计算机网络-应用层(1)Web应用与HTTP协议

    Web 页面(Web page,也叫文档)是由对象组成的. 对象:HTML文件.JPEG图片.视频文件.动态脚本等,通过一个URL地址寻址.每个URL地址由存放对象的服务器主机名和对象的路径名组成. ...

  7. [计算机网络-应用层] DNS:因特网的目录服务

    我们知道有两种方式可以识别主机:通过主机名或者IP地址.人们喜欢便于记忆的主机名标识,而路由器则喜欢定长的.有着层次结构的IP地址.为了折中这些不同的偏好,我们需要一种能进行主机名到IP地址转换的目录 ...

  8. [计算机网络-应用层] FTP协议

    文件传输协议:FTP 如下图所示:用户通过一个FTP用户代理与FTP交互.该用户首先提供远程主机的主机名,使本地主机的FTP客户机进程建立一个到远程主机FTP服务器进程的TCP连接.然后,该用户提供用 ...

  9. [计算机网络-应用层] P2P应用

    首先我们要先来区分一下下面的几种体系结构: CS:Client/Server 客户-服务器结构BS:Browser/Server  浏览器-服务器结构 P2P:Peer to Peer 对等结构 BS ...

随机推荐

  1. python基础7--集合

    集合set Python的set集合是一个无序不重复元素集.基本功能包括关系测试和消除重复元素.集合对象还支持union(并集).intersection(交集).difference(差集) 和 s ...

  2. 前端PHP入门-003-echo离不开它,注释看人品

    不要自以为是,瞪着双眼看是没有用的!因为你不是天才! 永远不要自欺欺人,写不出来代码就是不会. 不要问为什么?我头疼! 我接触的人当中,以为自己已经很很很牛X了,总是问为什么这么写? [心中吐槽]:我 ...

  3. ubuntu学习命令

    1.双系统下挂载windows硬盘 检测ntfs-3g是否安装:locate ntfs-3g 没有则安装: sudo apt-get install ntfs-3g 查看硬盘信息: sudo fdis ...

  4. gulp教程之gulp-autoprefixer

    现在浏览器的种类很多,不同浏览器的内核不同,同一浏览器也有很多不同的版本,很多css属性为了兼容浏览器需要加上特定的前缀,比如chrome的前缀是-webkit-,firefox前缀是-moz-等. ...

  5. (4.1)LingPipe在Eclipse中的运行

    酒店评论情感分析系统(四)——LingPipe在Eclipse中的运行 本来打算在做这个项目的时候,使用基于语义的文本倾向性分析方法,即先通过对评论文本进行中文分析,去停用词,然后在倾向性语义模式库的 ...

  6. c#开发_Dev的关于XtraGrid的使用(GridControl小结)

    1,增加新行用InitNewRow事件,给新行某字段赋值.后结束编辑. private void grdView_InitNewRow(object sender, DevExpress.XtraGr ...

  7. 引用类型 ( 对象定义 )——Function 类型

    本文地址:http://www.cnblogs.com/veinyin/p/7607798.html  函数实际上是对象,也具有属性和方法,函数名实际上是指向函数对象的指针 function sum( ...

  8. mysql 使用shell时出现 ERROR 2006 (HY000): MySQL server has gone away 解决方法

    ERROR (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection Current d ...

  9. three.js_camera相机

    https://blog.csdn.net/yangnianbing110/article/details/51275927 文章地址

  10. 2-Python基础语法-内存管理-运算符-程序控制

    目录 1 Python 基础语法 1.1 注释 1.2 缩进 1.3 续行 1.4 标识符 1.5 转义序列 1.6 数字 1.7 字符串 1.8 其他 2 Python 运算符 2.1 赋值运算符 ...