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输出列表实现代码
Sep 12 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
Nov 13 Javascript
php图像生成函数之间的区别分析
Dec 06 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
Jul 18 Javascript
$("").click与onclick的区别示例介绍
Sep 25 Javascript
原生js和jQuery随意改变div属性style的名称和值
Oct 22 Javascript
浅谈JavaScript事件的属性列表
Mar 01 Javascript
jQuery.Callbacks()回调函数队列用法详解
Jun 14 Javascript
分享bootstrap学习笔记心得(组件及其属性)
Jan 11 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
Nov 22 Javascript
使用pm2自动化部署node项目的方法步骤
Jan 28 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
Jun 13 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
数据库相关问题
2006/10/09 PHP
用ODBC的分页显示
2006/10/09 PHP
php上的memcache和memcached两个pecl库
2010/03/29 PHP
一个简单php扩展介绍与开发教程
2010/08/19 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
JavaScript使用prototype定义对象类型
2007/02/07 Javascript
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
JavaScript中的关联数组问题
2015/03/04 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
AngularJS基础 ng-list 指令详解及示例代码
2016/08/02 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
nodejs中request库使用HTTPS代理的方法
2019/04/30 NodeJs
JAVA面试题 static关键字详解
2019/07/16 Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
2020/04/09 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
[51:06]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS Liquid
2018/03/30 DOTA
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
python3中int(整型)的使用教程
2017/03/23 Python
基于Python执行dos命令并获取输出的结果
2019/12/30 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
python 一维二维插值实例
2020/04/22 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
澳大利亚领先的折扣药房:Chemist Direct(有中文站)
2018/11/24 全球购物
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
移动通信专业自荐信范文
2013/11/12 职场文书
庆祝国庆节演讲稿2014
2014/09/19 职场文书
Django与数据库交互的实现
2021/06/03 Python
详细了解java监听器和过滤器
2021/07/09 Java/Android
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers