常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

Cookie机制

什么是Cookie

Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。
由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

注意
Cookie功能需要浏览器的支持。不同的浏览器采用不同的方式保存Cookie。
如果浏览器不支持Cookie(如大部分手机中的浏览器)或者把Cookie禁用了,Cookie功能就会失效。

Cookie的不可跨域名性

很多网站都会使用Cookie。例如,Google会向客户端颁发Cookie,Baidu也会向客户端颁发Cookie。那浏览器访问Google会不会也携带上Baidu颁发的Cookie呢?或者Google能不能修改Baidu颁发的Cookie呢?
答案是否定的。Cookie具有不可跨域名性。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。
Cookie在客户端是由浏览器来管理的。浏览器能够保证Google只会操作Google的Cookie而不会操作Baidu的Cookie,从而保证用户的隐私安全。浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名。Google与Baidu的域名不一样,因此Google不能操作Baidu的Cookie。
需要注意的是,虽然网站images.google.com与网站www.google.com同属于Google,但是域名不一样,二者同样不能互相操作彼此的Cookie。

注意
用户登录网站www.google.com之后会发现访问images.google.com时登录信息仍然有效,而普通的Cookie是做不到的。这是因为Google做了特殊处理。本章后面也会对Cookie做类似的处理。domain设置成‘.google.com’即可

Unicode编码:保存中文

中文与英文字符不同,中文属于Unicode字符,在内存中占4个字符,而英文属于ASCII字符,内存中只占2个字节。Cookie中使用Unicode字符时需要对Unicode字符进行编码,否则会乱码。

提示:Cookie中保存中文只能编码。一般使用UTF-8编码即可。不推荐使用GBK等中文编码,因为浏览器不一定支持,而且JavaScript也不支持GBK编码。

BASE64编码:保存二进制图片

Cookie不仅可以使用ASCII字符与Unicode字符,还可以使用二进制数据。例如在Cookie中使用数字证书,提供安全度。使用二进制数据时也需要进行编码。

注意:本程序仅用于展示Cookie中可以存储二进制内容,并不实用。由于浏览器每次请求服务器都会携带Cookie,因此Cookie内容不宜过多,否则影响速度。Cookie的内容应该少而精。

设置Cookie的所有属性

除了name与value之外,Cookie还具有其他几个常用的属性。每个属性对应一个getter方法与一个setter方法。Cookie类的所有属性如表1.1所示。

Cookie常用属性

String name:该Cookie的名称。Cookie一旦创建,名称便不可更改

Object value:该Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码

int maxAge:该Cookie失效的时间,单位秒。如果为正数,则该Cookie在maxAge秒之后失效。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为–1

boolean secure:该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false

String path:Cookie的使用路径。如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”

String domain:可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”

String comment:Cookie的用处说明。浏览器显示Cookie信息的时候显示该说明

int version:该Cookie使用的版本号。0表示遵循Netscape的Cookie规范,1表示遵循W3C的RFC 2109规范

Cookie的有效期

Cookie的maxAge决定着Cookie的有效期,单位为秒(Second)。Cookie中通过getMaxAge()方法与setMaxAge(int maxAge)方法来读写maxAge属性。
如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效

Cookie的安全属性

HTTP协议不仅是无状态的,而且是不安全的。使用HTTP协议的数据不经过任何加密就直接在网络上传播,有被截获的可能。使用HTTP协议传输很机密的内容是一种隐患。如果不希望Cookie在HTTP等非安全协议中传输,可以设置Cookie的secure属性为true。浏览器只会在HTTPS和SSL等安全协议中传输此类Cookie。

cookie 原理及应用相关推荐

  1. 闭关修炼(二十二)session和cookie原理

    文章目录 简述 cookie 如何创建cookie 如何获取cookie cookie原理 session 如何创建session 如何获取session session原理 边角料 简述 cooki ...

  2. java ltpa_LTPA Cookie原理

    1. 什么是LTPA? Lightweight Third-Party Authentication (LTPA)是IBM Websphere和Domino产品中使用单点登录技术.当服务器配置好LTP ...

  3. linux cookie 地址,SYN Cookie原理及其在Linux内核中的实现

    在目前以IPv4为支撑的网络协议上搭建的网络环境中,SYN Flood是一种非常危险而常见的DoS攻击方式.到目前为止,能够有效防范SYN Flood攻击的手段并不多,而SYN Cookie就是其中最 ...

  4. Asp之Cookie篇—概述Cookie原理、归纳Cookie方法属性及应用

    什么是Cookies? Cookies是数据包,可以让网页具有记忆功能,在某台电脑上记忆一定的信息.Cookies的工作原理是,第一次由服务器端写入到客户端的系统中.以后每次访问这个网页,都是先由客户 ...

  5. Cookie原理详解

    Cookie 1 会话 会话:用户打开一个浏览器,点击了很多链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话. 有状态会话: 一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过, ...

  6. 身份认证 Session认证机制 Cookie原理

    身份认证 什么是身份认证 身份认证又称"身份验证"."鉴权",是指通过一定的手段,完成对用户身份的确认. 日常生活中的身份认证随处可见,例如:高铁的验票乘车,手 ...

  7. cookie原理详解及单点登录原理

    cookie一般是用来客户端存储信息的.用它可以进行用户信息的检验,实际案例-单点登录. cookie的原理 第一次访问网站的时候,浏览器发出请求,服务器响应请求后,会将cookie放入到响应请求中( ...

  8. Cookie原理及应用场景

    一.概念理解 1.什么是Cookie? Cookie 是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式.Cookie 是由 Web服务器保存在用户浏览器(客户端)上的小文本文件(内容 ...

  9. 劫持cookie原理(淘宝,天猫案例)

    由于JavaScript能读取到页面的Cookie,而用户的登录信息通常也存在Cookie中,这就造成了巨大的安全隐患,这是因为在HTML页面中引入第三方的JavaScript代码是允许的: < ...

最新文章

  1. 第二十八条:利用有限制通配符来提升API的灵活性
  2. sqlite to mysql_SqliteToMysql
  3. OpenCV, 名校机器学习相关课程
  4. 【TL】【编码】瞬间移动-百度之星初赛(Astar Round2B)1003-2016.05.22
  5. 被恶意上传了.php,轻松解决网站被恶意镜像
  6. 【Scala】Scala中常见集合的使用---代码详解
  7. 新鲜出炉 | 2019届互联网校招本科薪酬清单
  8. Perl篇:常用调试命令
  9. 解决pip下载速度太慢
  10. SDIO接口(4)——SDIO通信
  11. oracle语句执行过程
  12. 微信视频压缩画质怎么办?微信发视频怎么不压缩画质
  13. 输入一个数求他的因数c语言,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...
  14. vue使用支付宝支付
  15. REDIS11_HyperLogLog的概述、基本命令、UV、PV、DAU、MAU、首页UV如何进行统计处理
  16. 【运维面试】公司拒绝了你,后来又通知你去上班,还要不要去?
  17. 大学三年学习报告(兼谈中国高等教育)
  18. Salesforce诊断网络问题以排除性能下降
  19. Spring的@PostConstruct标签详解
  20. 表哥推荐python自学书籍:从入门到精通,读这十本书就够了!

热门文章

  1. RabbitMQ安装FAQ(接前面一篇)
  2. python爬虫基础扫盲之URL
  3. [Unity] 无脚本导出 Texture 为 PNG
  4. 太原理工微型计算机控制试卷,太原理工大学微机原理考试(13届葬仪落整理).docx...
  5. vue“路由懒加载” 技术,让网页快速加载 (优化篇)
  6. MUI - 自动轮播图 实现
  7. 燃鹅小助手自动抽奖源码
  8. 邓西百度网盘批量转存检测工具 v1.0.0818
  9. php计算器等号没反应,为什么按等号没有反应?
  10. discuz集思街淘宝客模板