详细介绍HTTP Cookie

Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。

Cookie相关的Http头

有 两个Http头部和Cookie有关:Set-Cookie和Cookie。

Set-Cookie由服务器发送,它包含在响应请求的头部中。它用于在客户端创建一个Cookie

Cookie头由客户端发送,包含在HTTP请求的头部中。注意,只有cookie的domain和path与请求的URL匹配才会发送这个cookie。

Set-Cookie Header

Set-Cookie响应头的格式如下所示:

 Set-Cookie: <name>=<value>[; <name>=<value>]...

     [; expires=<date>][; domain=<domain_name>]

     [; path=<some_path>][; secure][; httponly]

expires=<date>: 设置cookie的有效期,如果cookie超过date所表示的日期时,cookie将失效。

如果没有设置这个选项,那么cookie将在浏览器关闭时失效。

注意:date是格林威治时间(GMT),使用如下格式表示:DAY, DD MMM YYYY HH:MM:SS GMT

DAY
  The day of the week (Sun, Mon, Tue, Wed, Thu, Fri, Sat).
DD
  The day in the month (such as 01 for the first day of the month).
MMM
  The three-letter abbreviation for the month (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec).
YYYY
  year.
HH
  The hour value in military time (22 would be 10:00 P.M., for example).
MM
 The minute value.
SS
 The second value.
domain=<domain_name> :
path=<some_path>:

注:临时cookie(没有expires参数的cookie)不能带有domain选项。

当客户端发送一个http请求时,会将有效的cookie一起发送给服务器。

如果一个cookie的domain和path参数和URL匹配,那么这个cookie就是有效的。

一个URL中包含有domain和path,可以参考//www.jb51.net/w3school/html/html_url.htm

secure   : 表示cookie只能被发送到http服务器。

httponly : 表示cookie不能被客户端脚本获取到。

在程序中生成expires

C的方式

time_t curTime = time(NULL);
tm * gmTime = gmtime(&curTime);
char strExperis[50];
strftime(strTimeBuf, 100, " %a, %d %b %Y %X GMT;", gmTime);

JavaScript的方式

var d = new Date();
var expires = d.toGMTString();

Windows中的InternetSetCookie

在Windows中我们可以使用InternetSetCookie来设置Cookie,假如说,A和B两个进程使用Cookie通信,那么会有如下几种情况:

> A写Global Cookie,B写Session Cookie,此时,A中无法获取Cookie

> A写Session Cookie,B写Session Cookie,此时,A与B中的Cookie互不影响

> A写Session Cookie,B写Global Cookie,此时A中的Cookie被Global Cookie覆盖,它们共享一份Global Cookie

注:这种情况的后果下,如果有任意一个进程再写Session Cookie,那么其他进程将获取不到Cookie

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 浅谈golang的http cookie用法

    在服务端程序开发的过程中,cookie经常被用于验证用户登录.golang 的 net/http 包中自带 http cookie的定义,下面就来讲一下cookie的一般用法以及需要注意的问题. http cookie的定义 先来看下golang对cookie结构体的定义: type Cookie struct { Name string Value string Path string // optional Domain string // optional Expires time.Tim

  • 详解HTTP Cookie状态管理机制

    HTTP cookies,通常又称作"cookies",已经存在了很长时间,但是仍旧没有被予以充分的理解.首要的问题是存在了诸多误区,认为cookies是后门程序或病毒,或压根不知道它是如何工作的.第二个问题是对于cookies缺少一个一致性的接口.尽管存在着这些问题,cookies仍旧在web开发中起着如此重要的作用,以至于如果cookie在没有可替代品出现的情况下消失,我们许多喜欢的Web应用将变得毫无用处. 一.cookie 起源 cookie 最早是网景公司的雇员 Lou Mo

  • PHP设置Cookie的HTTPONLY属性方法

    httponly是微软对cookie做的扩展,这个主要是解决用户的cookie可能被盗用的问题. 大家都知道,当我们去邮箱或者论坛登陆后,服务器会写一些cookie到我们的浏览器,当下次再访问其他页面时,由于浏览器回自动传递cookie,这样就实现了一次登陆就可以看到所有需要登陆后才能看到的内容.也就是说,实质上,所有的登陆状态这些都是建立在cookie上的!假设我们登陆后的cookie被人获得,那就会有暴露个人信息的危险!当然,想想,其他人怎么可以获得客户的cookie?那必然是有不怀好意的人

  • httpwebreqeust读取httponly的cookie方法

    有httponly的cookie,在httpwebreqeust请求时,会获取不到,可以采用直接获取head中的set-cookie,再转换成Cookie添加到CookieContainer中 <pre name="code" class="csharp">string cookieStr = resp.Headers["Set-Cookie"]; string[] cookstr = cookieStr.Split(';'); fo

  • OkHttp3中默认不保持Cookie的解决方法

    OKhttp3中的cookies OkHttpClient client = new OkHttpClient().newBuilder().cookieJar(new CookieJar() { private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>(); @Override public void saveFromResponse(HttpUrl url, List<Coo

  • Okhttp3实现爬取验证码及获取Cookie的示例

    目前正在做毕业设计,一个关于校园服务的app,我会抽取已完成的相关代码写到文章里.一是为了造福这个曾经帮助过我的社区,二是写文章的同时更能巩固相关知识的记忆. 一.前言 在爬取教务系统的过程中,验证码的获取是非常重要的:在生成验证码的图片的同时,服务器会返回一个cookie,在接下来的所有请求都需要带上这个cookie. 二.使用前准备 2.1 简介 Okhttp是一个快速.高效的网络请求库.详情可以查阅官方文档 2.2 Android Studio配置gradle compile'com.sq

  • Python HTTP客户端自定义Cookie实现实例

    Python HTTP客户端自定义Cookie实现实例 几乎所有脚本语言都提供了方便的 HTTP 客户端处理的功能,Python 也不例外,使用 urllib 和 urllib2 可以很方便地进行 HTTP GET 和 POST 等各种操作.并且还允许以类似于插件的形式加入一些 handler ,来定制 request 和 response ,比如代理的支持和 cookie 的支持都是这样添加进来的.具体来说,通过如下方式构造一个 opener : opener = urllib2.build_

  • 详细介绍HTTP Cookie

    Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的.硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的.所以,按存在时间,可分为非持久Cookie和持久Cookie. Cookie相关的Http头 有 两个Http头部和Cookie有关:Set-Cookie和Cookie. Set-Cooki

  • UTF-8编码问题BOM详细介绍

    今天在写php代码的时候,出现一个特郁闷的问题那就是两个一模一样的文件,在IE下显示有一个文件却出显了一个空白行,如地址所示http://www.kuomart.com/blog/my_ex/bom_utf8.htm以上出现空白行的页面是用php的require('t.htm')导入模板输出的,而我的php文件和htm文件都是用的记事本写的,然后保存为utf-8编码的,这样之后就出现了用nodepad保存utf8文件自动添加bom到文件的开始,起先自己测试用nodepad,dw,edplus打开

  • python request 模块详细介绍

    request Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作. GET 请求 # 1.无参数实例     import requests     ret = requests.get('https://github.com/timeline.json')     print

  • JavaScript执行机制详细介绍

    目录 1.进程与线程的概念 2.浏览器原理 3.同步与异步 4.执行栈与任务队列 5.事件循环(Event-Loop) 6.定时器 前言: 不论是工作还是面试,我们可能都经常会碰到需要知道代码的执行顺序的场景,所以打算花点时间彻底搞懂JavaScript的执行机制. 想要搞懂JavaScript执行机制,你需要清楚下面这些知识: (以浏览器环境为例,与Node环境不同) 1.进程与线程的概念 浏览器原理 事件循环(Event-Loop),任务队列(同步任务,异步任务,微任务,宏任务) 进程与线程

  • Vue路由参数的传递与获取方式详细介绍

    目录 前言 1. 通过动态路由参数传递 2. 通过query字符串传递 3. props 隐式传递 前言 vue 页面路由切换时传参的方式有如下几种: 动态路由参数 它隐藏字段信息,相对于来说较安全,同时地址栏中的地址也相对较短 它必须是先定义后使用,一般用于根据固定参数,返回对应的数据所用 query字符串 ?id=1 通过search字符串的方式来在地址栏中传递数据,相对于来说地址栏会暴露字段信息安全性较低,一般用于搜索相关,它可以不定义就可以直接用 props 隐式传递 隐式传递,它一般用

  • GateWay路由规则与动态路由详细介绍

    目录 1.路由规则 2.动态路由 1.路由规则 Spring Cloud GateWay 帮我们内置了很多 Predicates功能,实现了各种路由匹配规则(通过 Header.请求参数等作为条件)匹配到对应的路由. 时间点后匹配 spring:    cloud:        gateway:            routes:                - id: after_route                    uri: https://example.org     

  • AngularJS 执行流程详细介绍

    一.启动阶段 大家应该都知道,当浏览器加载一个HTML页面时,它会将HMTL页面先解析成DOM树,然后逐个加载DOM树中的每一个元素节点.我们可以把AngularJS当做一个类似jQuery的js库,我们通过<script>标签引入到HTML中,那么此时Angular就做为一个普通的DOM节点等待浏览器解析,当浏览器解析到这个节点时,发现它是一个js文件,那么浏览器会停止解析剩余的DOM节点,开始执行这个js(即angular.js),同时Angular会设置一个事件监听器来监听浏览器的DOM

  • Java探索之Hibernate主键生成策略详细介绍

    1.increment 由Hibernate从数据库中去除主键的最大值(每个session只取一次),以该值为基础,每次增量为1,在内存中生成主键,不依赖于底层的数据库,因此可以跨数据库. <id name="id" column="id"> <generator class="increment" /> </id> Hibernate调用org.hibernate.id.IncrementGenerator类

  • python+mongodb数据抓取详细介绍

    分享点干货!!! Python数据抓取分析 编程模块:requests,lxml,pymongo,time,BeautifulSoup 首先获取所有产品的分类网址: def step(): try: headers = { ..... } r = requests.get(url,headers,timeout=30) html = r.content soup = BeautifulSoup(html,"lxml") url = soup.find_all(正则表达式) for i

  • VMware网络连接模式(桥接、NAT以及仅主机模式的详细介绍和区别)

    在使用VMware Workstation(以下简称:VMware)创建虚拟机的过程中,配置虚拟机的网络连接是非常重要的一环,当我们为虚拟机配置网络连接时,我们可以看到如下图所示的几种网络连接模式:桥接模式.NAT模式.仅主机模式.自定义网络连接模式.那么这几种网络连接模式都各自有什么主要用途,它们之间又有哪些区别呢? 磨刀不误砍柴工,为了更好地使用虚拟机,了解这几种连接模式的主要用途以及它们之间的区别是非常有必要的.在这里,我们就以下面的网络连接示意图为例来进行相关介绍. 在VMware中,虚

随机推荐