cookie属性及特点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cookie属性及特点相关的知识,希望对你有一定的参考价值。

参考技术A cookie属性:name、value、expires、domain、path、secure、max-age、HttpOnly。

1.name属性是必需的,它是一个键值对,用于指定Cookie的键。value

2.value属性是必需的,它是一个键值对,用于指定Cookie的值。

3.expires属性用于指定Cookie过期时间。它采用UTC或GMT格式

----如果不设置该属性,或者设为null,Cookie只在当前会话(session)有效,浏览器窗口一旦关闭,当前Session结束,该Cookie就会被删除。

----浏览器根据本地时间,决定Cookie是否过期,由于本地时间是不精确的,所以没有办法保证Cookie一定会在服务器指定的时间过期。

-----当设置的失效时间大于等于1天时:我们可以在 expires 属性后面直接输入XX天数。

  Cookies.set('name', 'value', expires: 7 );

4.domain属性指定Cookie所在的域名,比如example.com或subdomain.example.com。

如果未指定,默认为设定该Cookie的域名。所指定的域名必须是当前发送Cookie的域名的一部分,比如当前访问的域名是example.com,就不能将其设为google.com。只有访问的域名匹配domain属性,Cookie才会发送到服务器。

5.path属性用来指定路径,必须是绝对路径(比如/、/mydir),如果未指定,默认为请求该Cookie的网页路径。

6.secure属性用来指定Cookie只能在加密协议HTTPS下发送到服务器。

------该属性只是一个开关,不需要指定值。如果通信是HTTPS协议,该开关自动打开。

7max-age属性用来指定Cookie有效期,比如60 * 60 * 24 * 365

------正常情况下,max-age的优先级高于expires,但是二者有一些细微差别。

8.HttpOnly属性用于设置该Cookie不能被JavaScript读取.

Set-Cookie: key=value; HttpOnly

--------进行AJAX操作时,XMLHttpRequest对象也无法包括这个Cookie。这主要是为了防止XSS攻击盗取Cookie。

Cookie的特点

1.有生命周期

2.满足同源策略

3.内存大小收到限制(一般是4K左右)

浅谈HTTP Cookie 的 Secure 和 HTTPONLY属性

  最近工作中遇到了关于cookie的secure及httponly属性的问题,所以关注并学习了一段时间,这里做一下简要记录。关于secure和httponly标志的用途可以参考wikipedia.

  起因:系统PHP升级(5.1.7->5.4.5)并要求在下个升级后更新/etc/php.ini下的两个变量,设定值为1.

  Session.cookie_secure=1

  Session.cookie_httponly=1

  由此引发了这次调查,调查的内容涉及到了php自身cookie函数、开源框架CodeIgniter、Javascript以及JQuery对这两个属性的支持情况。

  1、创建Cookie

  PHP:5.2之前只支持secure,5.2之后添加了对httponly的支持

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

      CodeIgniter:在当前最新的2.1.2中只添加了对secure的支持,可是在github的CI开源项目上我发现了在下一个版本里httponly将会被添加进去。

function set_cookie($name = ‘‘, $value = ‘‘,$expire = ‘‘, $domain = ‘‘, $path = ‘/‘, $prefix = ‘‘, $secure = FALSE)

     Javascript: 从这两个属性的作用就可以推测出,js对secure的支持是没问题的,可是httponly本就是为限制js而产生的,当然httponly的cookie也不会被js创建

document.cookie = "username=" +escape("leon") + "; expires=15/02/2013 00:00:00; path=/;domain=www.example.com; secure";

    Jquery: 作为js的框架,情况和js类似。

$.cookie(‘the_cookie‘, ‘the_value‘, { expires: 7,path: ‘/‘, domain: ‘x.com‘, secure: true });

    综上可知,httponly参数只可以在服务器端设置,即通过PHP的setcookie()方法设置。所以如需添加这个属性,项目里所有对cookie的set操作都应拿到服务端进行。

 

  httponly参数是用来限制非HTTP协议程序接口对客户端COOKIE进行访问的,所以客户端脚本,如JS是无法取得这种COOKIE的,同时,JQuery中的“$.cookie(‘xxx‘)”方法也无法正常工作,所以想要在客户端取到httponly的COOKIE的唯一方法就是使用AJAX,将取COOKIE的操作放到服务端,接收客户端发送的ajax请求后将取值结果通过HTTP返回客户端。

以上是关于cookie属性及特点的主要内容,如果未能解决你的问题,请参考以下文章

cookie及session的特点

干货丨HTML图像标签特点及相关属性介绍

HTTP报文结构及Cookiesession区别

Android基础TOP3:线性布局的特点,常用属性,及权重值

什么是javascript?并说明它的使用目的及基本特点。

cookie,localStorage,sessionStorage的特点与区别。