cookie在javascript中的使用技巧以及隐私在服务器端的设置


Posted in Javascript onDecember 03, 2012

读取cookie字符串方法:

alert(document.cookie);

一个网站的cookie字符串包含了该站点域名下的所有cookie(javascript 可访问的,不包括 httponly 的cookie ),多个cookie之间用分号和一个空格隔开,最多一般是 20个或50个,例如,包含2个cookie的字符串格式为

document.cookie = "key1=value1; key2=value2"

一个cookie字符串最长为4k,超出个数限制或长度限制时将返回空值, cookie 个数超出限制时,会造成另外一些 cookie 丢失,按规范,丢失的应该是 最近、最少使用的,但是浏览器的实现并不完全遵循这个规范。

设置一个cookie的方法:

document.cookie="key=value;expires=date;path=/;domain=xxx.com;secure";

要设置多个cookie 只要反复使用 document.cookie = XXX 即可,会自动和其他cookie拼接成一个cookie字符串。

如果要读取某个cookie的值,只能通过解析cookie字符串来得到。

下面是设置cookie时的几个参数

1、名和值:key 为 cookie名称,value为cookie值

2、过期时间:expires用于设置过期时间,为格林威治字符串格式,如 

expires = new Date('2011-12-30').toUTCString(); //"Fri, 30 Dec 2011 00:00:00 GMT"

如果没有设置过期时间,cookie将在浏览器关闭时失效。

 

3、所属路劲:网站某张网页中的脚本所设置的cookie默认情况下只能供该网页所在文件夹及其子文件夹中的网页访问,如 https://3water.com/aa/1.html 所设置的cookie 不能被 https://3water.com/bb/2.html 访问,更多的时候都希望一个cookie能被本站所有网页访问,这就需要设置path属性, path=/ 表示该cookie的所属路劲是网站根目录,这样本站所有网页都能访问。

4、所属域名:cookie无法跨域访问,一般情况下,cookie仅供本站使用,如果想在多个网站下共享,那么共享cookie的网站必须拥有同一个主域名,通过设置 domain属性来实现。比如,如果想让 3water.com 和 bbs.3water.com这两个二级域名下的网站共享cookie,在设置cookie时需要设置domain=3water.com

5、加密传输:如果一个cookie带有secure属性,那么cookie在传输到服务器的过程中将使用加密数据的方式传输。

 

 

cookie字符串编码:

cookie字符串中不能包含空格,分号,逗号等特殊符号,如果可能包含这些符号,可以使用encodeURIComponent()函数将 cookie 的值进行编码,读取 cookie 的值时再使用decodeURIComponent()函数把值进行转换回来,如 document.cookie="key="+encodeURIComponent(value);

  

在服务器设置 cookie 并声明其私密性(secure 及 httponly):

有时候为安全,你可能需要限制一些 cookie 的访问

secure : 该 cookie 仅供 https 安全连接使用

httponly : cookie 仅供 http 传输过程中使用,javascript 不能访问该 cookie

例如,在PHP 中使用内置函数setcookie() 设置一个具有私密性限制的 cookie

setcookie("UserIDCookie","123456",time()+60*30,'/','mytest.com',false,true);

其中第六个参数 表示是否仅供 https 连接使用,第 七个参数 true 表示是否为 httponly

 

跨域请求及第三方 cookie ,以及 P3P(个人隐私保护策略):

浏览器的隐私设置(或者内容设置,chrome 在高级设置--内容设置 选项)中,设置禁止使用第三方 cookie 时,跨域请求(包括 iframe ,img ,javascript 文件等请求)无法发送属于该域的 cookie .

例如, 通过 iframe 引用一个跨域的 页面 https://3water.com/index.html ,即使浏览器中保存了属于 other.com 域名下的某个名为 otherLoginFrag 的cookie  ,在 iframe 中请求 该页面时, otherLoginFrag 并不会随请求一起发往 www.other.com 的服务器。

第三方 cookie 限制在不同的浏览器中可能略有不同,比如, safari 在禁用 第三方 cookie 时,from 表单的提交也只有 post 方式才能提交 cookie .

如果在希望在浏览器禁用 第三方cookie 时仍能发送跨域请求的 cookie ,就需要在跨域的服务器中使用 P3P 响应头预先声明允许发送的 cookie.

设置一个cookie的方法:

Javascript 相关文章推荐
jQuery检测输入的字符串包含的中英文的数量
Apr 17 Javascript
基于Javascript实现弹出页面效果
Jan 01 Javascript
JQuery ztree带筛选、异步加载实例讲解
Feb 25 Javascript
使用jquery如何获取时间
Oct 13 Javascript
浅谈JS中的反柯里化( uncurrying)
Aug 17 Javascript
JS实现的按钮点击颜色切换功能示例
Oct 19 Javascript
详解如何在你的Vue项目配置vux
Jun 04 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
Jul 24 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
Sep 02 Javascript
Ant Design Pro 下实现文件下载的实现代码
Dec 03 Javascript
小程序瀑布流组件实现翻页与图片懒加载
May 19 Javascript
JS this关键字在ajax中使用出现问题解决方案
Jul 17 Javascript
js函数调用常用方法详解
Dec 03 #Javascript
JS随即打乱数组实现代码
Dec 03 #Javascript
JS图片预加载 JS实现图片预加载应用
Dec 03 #Javascript
输入密码检测大写是否锁定js实现代码
Dec 03 #Javascript
js操作textarea 常用方法总结
Dec 03 #Javascript
javascript object array方法使用详解
Dec 03 #Javascript
让AJAX不依赖后端接口实现方案
Dec 03 #Javascript
You might like
PHP 压缩文件夹的类代码
2009/11/05 PHP
php中用数组的方法设置cookies
2011/04/21 PHP
THinkPHP获取客户端IP与IP地址查询的方法
2016/11/14 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
javascript 弹出层组件(升级版)
2011/05/12 Javascript
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
提高jQuery性能的十个诀窍
2013/11/14 Javascript
js中定义一个变量并判断其是否为空的方法
2014/05/13 Javascript
原生Javascript封装的一个AJAX函数分享
2014/10/11 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
Javascript实现的SHA-256加密算法完整实例
2016/02/02 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
Python中使用支持向量机(SVM)算法
2017/12/26 Python
Python中顺序表的实现简单代码分享
2018/01/09 Python
Tornado高并发处理方法实例代码
2018/01/15 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
django 删除数据库表后重新同步的方法
2018/05/27 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
详解django中Template语言
2020/02/22 Python
THE OUTNET英国官网:国际设计师品牌折扣网站
2016/08/14 全球购物
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
《泉水》教学反思
2014/04/11 职场文书
学生安全责任书模板
2014/07/25 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
销售开票员岗位职责
2015/04/15 职场文书