Cookie提要

Cookie的基本概念和设置

Cookie在远程浏览器端存储数据并以此跟踪和识别用户的机制。从实现上说,Cookie是存储在客户端上的小段数据,浏览器(即客户端)通过HTTP协议和服务器端进行Cookie交互。

注意 这里说的是客户端而不是浏览器,实际能管理Cookie的不仅仅是浏览器,当然最常见的是由浏览器管理Cookie,后面的叙述中不再区分这两个概念。

Cookie独立语言存在,也就是说,不论PHP还是JSP种下的Cookie,其本质都是一样的,客户端脚本(如JavaScript)均能读取到。Cookie并不是由这些语言实现,而这些语言则是实现对Cookie的间接操作,聚聚发送HTTP指令,浏览器收到指令便操作Cookie返回给服务器。因此,Cookie是由于浏览器实现和管理的。关于Cookie的RFC文档主要有:RFC6265、RFC2109。

举例来说,我们经常使用PHP设置Cookie,但实际上PHP并没有真正设置过Cookie,甚至可以说,PHP根本就没有这个能力设置Cookie。它只是发出命令让浏览器来做这件事而已,形象地说就和“有关部门”打个招呼。了解这个概念,对于后面的学习很重要。

Cookie主要是参照RFC2109标准实现和客户端之间的交互指令。

在PHP中可以使用setcookie()或setrawcookie()函数设置Cookie。其函数原型如下:

bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

第一个参数是必选参数,其值是Cookie的名称,即$_COOKIE这个全局数组的键值。

第二个参数用来设置Cookie的值。参数值为空时,Cookie值为空。由于把Cookie的值设为false会使客户端尝试删除这个Cookie,所以要在Cookie在保存true或false时不应该直接使用boolean值,而应该用于0表示false,用1表示true,用1表示true。只要愿意,用A表示false, B表示true也是可以的。

第三个用来设置有效时间,以秒为单位。这个值很重要,决定了Cookie的存储方式。

第四个参数用来设置Cookie的有效目录,默认为“/”,即整个域名下有效,如果有需要,可能设置仅在某目录下有效。

第五个参数用来设置Cookie的作用域名,默认域名下。需要注意的是,在IE下,包括点号长度小于等于5的短域名如果带domain参数,会导致Cookie设置失败。

第六个参数用于设置是否对Cookie进行加密传输,默认为false。如果设置true,只有使用HTTPS,这个Cookie才会被设置。所以,通常情况下不设置此参数或使用默认值false。

第七个参数表示是否只使用HTTP访问Cookie。如果1为1或者true,客户端的JavaScript就无法操作这个Cookie。使用此参数可以减少XSS攻击的风险,但注意,不是所有的浏览器都支持这个参数。此参数只在PHP5.2.0以上版本有效。(再次强调,Cookie和PHP没有任何关系,具体的管理由客户端全程完成。)

提示 setrawcookie的功能和参数与setcookie基本一样,唯一区别是setraw-cookie不会对Cookie中的value进行urlencode转码。

设置Cookie时需要注意以下几点:

这个函数一个返回值,如果是false,代表设置失败;如果true,代表设置成功。但是这个返回值仅供参考,不代表客户端一定能接收到。

由于PHP在当前页设置的Cookie不能立即生效,要等到下一个页面才能看到。这是由于设置的这个页面里的Cookie由服务器传递给客户浏览器,在下一个页面浏览器才能把Cookie从客户的机器里取出传回服务器。如果是JavaScript设置的,是立即生效的。

Cookie没有显式的删除函数。如果想删除Cookie,应该将Cookie的expire设置为过期时间,如1小时前、1970年等,这会自动触发浏览器的删除机制。

Cookie跨域与P3P协议

正常的Cookie只能在一个应用中共享,即一个Cookie只能由创建它的应用获得。实现Cookie跨域,主要是为了统一应用平台,即实现目前最流行的单点登录。最简单的方式就是使用P3P协议。

P3P(Platform for Privacy Preferences)协议由万维网协议研制,为Web用户提供了对自己公开信息的更多控制。支持P3P协议的Web站点为浏览者声明它们的隐私策略。支持P3P协议的浏览器将Web站点策略与用户隐私偏好进行对比,并为用户提出不匹配的警告,通知用户有关Web隐私的处理方式。

Cookie跨域涉及两个不同的应用,习惯上称为第一方和第三方。

第一方Cookie来自当前正在查看的网站,或者发送到当前正在查看的网站。

第三方Cookie来自当前正在查看的网站以外的网站,或者发送到当前正在查看的网站以外的网站。

第三方网站通常提供正在查看的网站上的内容。例如,许多站点使用来自第三方网站的广告,或者IFAME的别的网站的URL,这些第三方的网站可能使用的Cookie.

通过P3P使用户自己可以指定浏览器的隐私策略,达到存取第三方Cookie的目的。也许你觉得这跟web应用 毫无关系,真正的问题是如何让服务器指定用户浏览器的隐私策略,这就是P3P的使命,只要在响应用户请求时,在HTTP的头信息中增加相关于P3P的配置信息就可以了,

时间: 2024-08-05 21:55:16

Cookie提要的相关文章

中级前端知识点提要

中级前端知识点提要 标签(空格分隔): JavaScript HTML 基础 1 Restful API Representational State Transfer(表现层状态转移). URL定位资源,用HTTP动词(GET POST PUT DELETE)描述操作. 资源.统一接口.URI.无状态. 应该将API的版本号放入URL:URL中只能有名词而不能有动词:API应该提供参数. 2 CommonJS/AMD/CMD/ES6 Module 2.1 CommonJS 是Node.js模块

COOKIE+SESSION

cookie的缺点: 因为cookie保存在浏览器上,所以安全性低可控性比较差,只能存放字符串大多数的浏览器对cookie有4K的限制. 下面是cookie在浏览器和服务器中请求与响应的过程: 1.    COOKIE的工作原理 cookie过程描述 网站为了辨别用户身份.进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密) 用户第一次访问你的网站->在服务器端会将用户的信息设置为cookie(可以理解为制造饼干过程)->通过http协议发送给用户(浏览器),在用户端,coo

会话技术Session&Cookie

一.会话技术简介 1.存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪     里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话技术是帮助服务器   记住客户端状态(区分客户端) 举例购物过程: 2.会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话.会话技术就是记录这次会话中客户端的状态与数据的. 会话技术分为Cookie和Sessio

JS设置读取删除cookie及表单交互

学习cookie和表单交互留下的一点笔记 什么是cookie?cookie 是存储于客户端的变量.当设备请求页面时,就会发送cookie.首先需要稍微了解一下cookie的结构,简单地说:cookie是以键值对的形式保存的,即key=value的格式.各个cookie之间一般是以";"分隔.JS设置cookie:document.cookie= key + '=' + value + ';expires=' + Date;其中Date为cookie的过期时间.实际案例: //setCo

session和cookie的区别

原作者:施杨(施杨's Think out)出处:http://shiyangxt.cnblogs.com 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie 里的内容来判断使用者,送出特定的网页内容给你. Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 Cook

cookie和session得区别

1.cookie 是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个WEB站点会话间持久的保持数据. 2.session其实指的就是访问者从到达某个特定主页到离开为止的那段时间. Session其实是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个Cookie,当这个Session结束时,其实就是意味着这个Cookie就过期了. 注:为这个用户创建的Cookie的名称是aspsessionid.这个Cookie的唯一目的就是为每一个用

javaWeb基础知识----Cookie,Session

?HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的,浏览器的每一次请求都是完全孤立的 ?即使 HTTP1.1支持持续连接,但当用户有一段时间没有提交请求,连接也会关闭. ?怎么才能实现网上商店中的购物车呢:某个用户从网站的登录页面登入后,再进入购物页面购物时,负责处理购物请求的服务器程序必须知道处理上一次请求的程序所得到的用户信息. ?作为 web 服务器,必须能够采用一种机制来唯一地标识一个用户,同时记录该用户的状态 1.会话和会话状态 ?WEB应用中的会

Session和Cookie的使用总结

转:http://www.cnblogs.com/shuang121/archive/2011/03/02/1968768.html Session和Cookie的使用总结: Session和cookie都是asp.Net中的内置对象,至于他们有什么区别,在这里就不在多说,现在来说说一些比较实用点的东西: 我们知道网站都有一个后台管理系统,其中有登录和退出两个功能,在登录的时候我们往往会把用户的信息保存到session或者cookie中,以便后面使用,那么在登录的时候我们要注意哪些呢? 1.把一

学习日常笔记<day11>cookie及session

1.会话管理 1.1会话管理定义 会话管理:管理浏览器客户端和服务端之间的会话过程中产生的会话数据 域对象:实现资源之间的数据共享 request 域对象 context 域对象 1.2.会话技术 Cookie技术:会话数据保存在浏览器客户端中 Session技术:会话数据保存在服务器端 2.Cookie技术 2.1 特点 Session技术:会话数据保存在服务器端 2.2Cookie技术核心 Cookie类:用于存储会话数据 1)构造Cookie对象 Cookie(java.lang.Stri