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 相关文章推荐
通过js脚本复制网页上的一个表格的不错实现方法
Dec 29 Javascript
纯JavaScript实现的完美渐变弹出层效果代码
Apr 02 Javascript
让mayfish支持mysqli数据库驱动的实现方法
May 22 Javascript
简单实用的反馈表单无刷新提交带验证
Nov 15 Javascript
使用js显示当前时间示例
Mar 02 Javascript
javascript中数组的多种定义方法和常用函数简介
May 09 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
Aug 20 Javascript
JavaScript中的6种运算符总结
Oct 16 Javascript
Bootstrap实现登录校验表单(带验证码)
Jun 23 Javascript
使用cropper.js裁剪头像的实例代码
Sep 29 Javascript
JS实现简单贪吃蛇小游戏
Oct 28 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
Oct 29 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
php5.2时间相差8小时
2007/01/15 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
转义字符(\)对JavaScript中JSON.parse的影响概述
2013/07/17 Javascript
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
js实现具有高亮显示效果的多级菜单代码
2015/09/01 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
基于Vue过渡状态实例讲解
2017/09/14 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
详解Angular5 路由传参的3种方法
2018/04/28 Javascript
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python显示进度条的方法
2014/09/20 Python
Python实现的计算器功能示例
2018/04/26 Python
python远程调用rpc模块xmlrpclib的方法
2019/01/11 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
Python  Django 母版和继承解析
2019/08/09 Python
python批量处理文件或文件夹
2020/07/28 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
启动一个线程是用run()还是start()
2016/12/25 面试题
应届毕业生的个人自我鉴定
2013/10/24 职场文书
长安大学毕业生自我鉴定
2014/01/17 职场文书
勤俭节约倡议书
2014/04/14 职场文书
工作评语大全
2014/04/26 职场文书
质量月口号
2014/06/20 职场文书
公司承诺函范文
2015/01/21 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
Python基础之元类详解
2021/04/29 Python
Python批量将csv文件转化成xml文件的实例
2021/05/10 Python