原文地址:http://www.cnblogs.com/lgxlsm/archive/2012/11/21/2781762.html

1.什么是Cookies

  Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。Cookie 包含每次用户访问站点时 Web 应用程序都可以读取的信息。

  例如,如果在用户请求站点中的页面时应用程序发送给该用户的不仅仅是一个页面,还有一个包含日期和时间的 Cookie,用户的浏览器在获得页面的同时还获得了该 Cookie,并将它存储在用户硬盘上的某个文件夹中。

  以后,如果该用户再次请求您站点中的页面,当该用户输入 URL 时,浏览器便会在本地硬盘上查找与该 URL 关联的 Cookie。如果该 Cookie 存在,浏览器便将该 Cookie 与页请求一起发送到您的站点。然后,应用程序便可以确定该用户上次访问站点的日期和时间。您可以使用这些信息向用户显示一条消息,也可以检查到期日期。

  Cookie 与网站关联,而不是与特定的页面关联。因此,无论用户请求站点中的哪一个页面,浏览器和服务器都将交换 Cookie 信息。用户访问不同站点时,各个站点都可能会向用户的浏览器发送一个 Cookie;浏览器会分别存储所有 Cookie。

  Cookie 帮助网站存储有关访问者的信息。一般来说,Cookie 是一种保持 Web 应用程序连续性(即执行状态管理)的方法。除短暂的实际交换信息的时间外,浏览器和 Web 服务器间都是断开连接的。对于用户向 Web 服务器发出的每个请求,Web 服务器都会单独处理。但是在很多情况下,Web 服务器在用户请求页时识别出用户会十分有用。例如,购物站点上的 Web 服务器跟踪每位购物者,这样站点就可以管理购物车和其他的用户特定信息。因此,Cookie 可以作为一种名片,提供相关的标识信息帮助应用程序确定如何继续执行。

  使用 Cookie 能够达到多种目的,所有这些目的都是为了帮助网站记住用户。例如,一个实施民意测验的站点可以简单地将 Cookie 作为一个 Boolean 值,用它来指示用户的浏览器是否已参与了投票,这样用户便无法进行第二次投票。要求用户登录的站点则可以通过 Cookie 来记录用户已经登录,这样用户就不必每次都输入凭据。

2.Cookies如何存储

  Cookies保存在用户的本地机器上,不同的浏览器存储在不同的文件夹中,并且按照域名分别保存。即网站之间的Cookies不会彼此覆盖。

  IE浏览器的用户可以通过在本地的文档中找到Cookies的txt文件, 不同操作系统的位置不同,windows xp都保存在:C:\Documents and Settings\Administrator\Cookies文件夹下。其中名称txt按照域名保存,比如163域下的cookies为:administrator@163[1].txt或者administrator@163[2].txt

3.Cookies如何传递

运行下面的例子(asp.net简单的增删查改)

public partial class Default5 : System.Web.UI.Page {     protected void Page_Load(object sender, EventArgs e)     {      }     protected void Button1_Click(object sender, EventArgs e)     {         HttpCookie cookie = new HttpCookie("MyCook");//初使化并设置Cookie的名称         DateTime dt = DateTime.Now;         TimeSpan ts = new TimeSpan(0, 0, 1, 0, 0);//过期时间为1分钟         cookie.Expires = dt.Add(ts);//设置过期时间         cookie.Values.Add("userid", "userid_value");         cookie.Values.Add("userid2", "userid2_value2");         Response.AppendCookie(cookie);         //输出该Cookie的所有内容         //Response.Write(cookie.Value);//输出为:userid=userid_value&userid2=userid2_value2      }     protected void Button2_Click(object sender, EventArgs e)     {         // HttpCookie cokie = new HttpCookie("MyCook");//初使化         if (Request.Cookies["MyCook"] != null)         {             //Response.Write("Cookie中键值为userid的值:" + Request.Cookies["MyCook"]["userid"]);//整行             //Response.Write("Cookie中键值为userid2的值" + Request.Cookies["MyCook"]["userid2"]);             Response.Write(Request.Cookies["MyCook"].Value);//输出全部的值         }     }     protected void Button3_Click(object sender, EventArgs e)     {         //获取客户端的Cookie对象         HttpCookie cok = Request.Cookies["MyCook"];          if (cok != null)         {             //修改Cookie的两种方法             cok.Values["userid"] = "alter-value";             cok.Values.Set("userid", "alter-value");              //往Cookie里加入新的内容             cok.Values.Set("newid", "newValue");             Response.AppendCookie(cok);         }     }     protected void Button4_Click(object sender, EventArgs e)     {         HttpCookie cok = Request.Cookies["MyCook"];         if (cok != null)         {             TimeSpan ts = new TimeSpan(-1, 0, 0, 0);             cok.Expires = DateTime.Now.Add(ts);//删除整个Cookie,只要把过期时间设置为现在             Response.AppendCookie(cok);         }     } }

Cookies的信息是在Web服务器和浏览器之间传递的。保存在Http请求中。

1.如果页面要求写入Cookies信息,则返回的Http如下,注意加粗的部分:

响应头信息原始头信息 Cache-Control    private Connection    Close Content-Length    820 Content-Type    text/html; charset=utf-8 Date    Wed, 21 Nov 2012 14:57:28 GMT Server    ASP.NET Development Server/10.0.0.0 Set-Cookie    MyCook=userid=userid_value&userid2=userid2_value2; expires=Wed, 21-Nov-2012 14:58:28 GMT; path=/ X-AspNet-Version    4.0.30319 请求头信息

2.在请求一个页面的Http头中,会将属于此页面的本地Cookies信息加在Http头中

请求头信息原始头信息 Accept    text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding    gzip, deflate Accept-Language    zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Connection    keep-alive Cookie    MyCook=userid=userid_value&userid2=userid2_value2 Host    localhost:1092 Referer    http://localhost:1092/SlwyWeb/Default5.aspx User-Agent    Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/17.0 Firefox/17.0 来自上传流的请求头信息

4.Cookies如何查看

(1)查看Cookies的txt文件(上面的例子放在C:\Documents and Settings\Administrator\Cookiesadministrator@localhost[2].txt)

文件里面写着下面的内容

--------------------------------------------------

MyCook
userid=userid_value&userid2=userid2_value2
localhost/
1024
3775538048
30263287
3177408048
30263287
*

----------------------------------------------------

(2)使用插件(FF的Web Developer插件)可以很方便的查看、删除和修改Cookies

Cookies高级知识

1.Cookie 的限制

  大多数浏览器支持最大为 4096 字节的 Cookie。

  浏览器还限制站点可以在用户计算机上存储的 Cookie 的数量。大多数浏览器只允许每个站点存储 20 个 Cookie;注意这里的20个是指主键值,也就是20条Cookies记录,但是每个Cookies记录还可以包含若干子键,下面会详细解释。如果试图存储更多 Cookie,则最旧的 Cookie 便会被丢弃。有些浏览器还会对它们将接受的来自所有站点的 Cookie 总数作出绝对限制,通常为 300 个。

2.Cookies的存储格式

  Cookies可以包含一个主键, 主键再包含子键。比如asp.net中获取Cookies的格式是:

Request.Cookies[key][subkey].ToString();

   其中的key就是主键,subkey就是主键关联的子键。

(1)本地磁盘存储格式:

--------------------------------------

MyCook
userid=userid_value&userid2=userid2_value2
localhost/
1024
3775538048
30263287
3177408048
30263287
*

------------------------------------

MyCook就是主键;userid=userid_value&userid2=userid2_value2就是主键关联的子键。

(2)Javascript中的Cookie格式

  在Javascript中给的Cookie是一个字符串,通过document.cookies获取。字符格式如下:

My.Common.SubKey=Pkid=999&TestValue=aaabbbcccdddeee; SingleKey=SingleKeyValue

  上面的字符串包含了两个Cookies,一个是不包含子键的SingleKey, 一个是包含pkid和TextValue两个子键的My.Common.SubKey,两个Cookie通过“;”分割。

(3)Asp.Net中的Cookies格式

  通过HttpResquest和HttpResponse对象的Cookies属性,可以获取和写入当前页面的Cookies。上面已经有了,我就不写了

3.Cookies的内容编码格式

  Cookies的值中可以保存除了“;”以外的标点符号。但是不能保存汉字。保存汉字会出现乱码。

所以对于Cookies中的内容要进行统一的编码和解码。为了在浏览器端和服务器端都能够进行解码和编码, 所以要统一使用UTF编码格式。

主要是因为javascript中只能使用UTF编码格式。

4.Cookies的Path属性

  Cookies的Path属性表示当前的Cookies可以作用在网站的那个路径下。允许存在两个同名但是Path不同的Cookies。

无论是服务器端还是客户端,在获取时优先获取本页路径下面的Cookies。(如下图)

5.Cookies的过期时间

  如果保存Cookies时未设置过期时间, 则Cookies的过期时间为“当前浏览器进程有效”,即和Session一样关闭浏览器后则消失。在asp.net中还可以通过设置HttpCookie对象的过期时间为DateTime.MinValue来指定此Cookies为跟随浏览器生效。(这句话来之不易啊,在脑袋等人的帮助下才查到的。)

  如果设置了过期时间并且大于当前时间,则会保存Cookies值。

  如果设置了过期时间但是小于等于当前时间,则清除Cookies值。

转载于:https://www.cnblogs.com/fcsh820/archive/2012/11/23/2784867.html

(转)什么是Cookies详解相关推荐

  1. HTTP cookies 详解

    HTTP cookies,通常又称作"cookies",已经存在了很长时间,但是仍旧没有被予以充分的理解.首要的问题是存在了诸多误区,认为cookies是后门程序或病毒,或压根不知 ...

  2. Java____HTTP协议Cookies详解

    1.状态管理 状态管理是你对同一个或不同页的多个请求维护状态和页信息的过程 状态管理的作用:       指示用户信息,关联浏览器实例       使得页与页之间,请求与请求之间能够共享信息      ...

  3. ASP.NET 2.0 中Cookies的Expires属性详解

    ASP.NET 2.0 中Cookies的Expires属性详解 response.cookies("cookiename").expires中expires的属性如下: resp ...

  4. webSocket详解

    前言 本文会用实例的方式,将iOS各种IM的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. 注:文中的所有的代码示例,在github中都有demo: iOS即时通讯,从入门到&quo ...

  5. Tomcat(二):tomcat配置文件server.xml详解和部署简介

    1. 入门示例:虚拟主机提供web服务 该示例通过设置虚拟主机来提供web服务,因为是入门示例,所以设置极其简单,只需修改$CATALINA_HOME/conf/server.xml文件为如下内容即可 ...

  6. PHP环境配置文件php.ini详解注释 --转贴

    来源:http://www.ampc8.com/thread-22217-1-1.html 现在大多数网站都是基于PHP程序的脚本了,其中php.ini是php的核心配置问,下面是它的详细讲解注释. ...

  7. scrapy爬虫储存到mysql_详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库

    获取要爬取的URL 爬虫前期工作 用Pycharm打开项目开始写爬虫文件 字段文件items # Define here the models for your scraped items # # S ...

  8. python中requests库的用途-python中requests库session对象的妙用详解

    在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息. 妙用1 requests库的session对象能够帮我们跨请求保持某些参数,也 ...

  9. 【转】HTTP协议详解

    原文地址:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436.html 一.概念 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则 ...

  10. $.post把表单对象传递过去_第二章 第三节 Request请求对象详解

    Request对象和Response对象是必须熟悉的. Request对象负责请求的构造和处理 Response对象负责返回资源的解析和处理 一.Request对象参数 Request(url[, c ...

最新文章

  1. 跨年之际,中文版畅销书《TensorFlow深度学习实战大全》分享,直接送!
  2. python __builtins__ complex类 (13)
  3. 15条最重要且最基本的SEO优化Tips和技巧
  4. mysql存储过程1267_mysql存储过程一例
  5. boost::log模块实现多线程异步日志记录示例
  6. 软件工厂是否真的可能存在?
  7. 查linux有哪些task_浅谈Linux线程模型
  8. vue复选框组件自定义对勾_vue2.0中ckeckbox(复选框)的使用心得,及对click事件和change的理解...
  9. SpringBoot - 使用ExecutorService线程池执行异步任务教程(以Runnable任务为例)
  10. 覆盖17类面试题小结
  11. 服务端程序的keeplive
  12. 单场淘汰制场次计算方法_淘汰赛、单循环赛和双循环赛的计算方法分别是什么?...
  13. WAIC直击:星环科技以大数据AI技术构建新型数字底座
  14. c语言中char * string,浅析string 与char* char[]之间的转换
  15. python编写游戏测试机器人客户端(一)
  16. catia二维图坐标如何表示_CATIA二维工程制图中孔系尺寸及点坐标标注方法
  17. OpenCV学习篇2:viz模块简单用法
  18. 全国计算机二级考试对选择题有要求吗,全国计算机二级考试攻略
  19. git clone 报 “remote: The project you were looking for could not be found.”
  20. springboot-admin 整合nacos处理含有context-path的应用问题

热门文章

  1. “网友”叫你先上STM32,51是小朋友玩的,所以你就不学51了
  2. springBoot过滤器去除请求参数前后空格
  3. docker 升级linux内核,docker-machine之升级linux内核
  4. 【渝粤教育】国家开放大学2018年春季 0603-22T建筑工程管理与实务 参考试题
  5. 【渝粤教育】广东开放大学 生产与运作管理 形成性考核 (36)
  6. 大型项目编译注意事项
  7. ubuntu16.04中将自己的ubuntu做成镜像
  8. Spring Boot 系列(七)Swagger2-生成RESTful接口文档
  9. [转]vc6.0安装boost1.34.1
  10. [转]sql server 2005 中的内连接和外连接