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 相关文章推荐
查询json的数据结构的8种方式简介
Mar 10 Javascript
JavaScript 浏览器对象模型BOM使用介绍
Apr 13 Javascript
JQuery实现鼠标滚轮滑动到页面节点
Jul 28 Javascript
Bootstrap基本样式学习笔记之按钮(4)
Dec 07 Javascript
详解webpack+es6+angular1.x项目构建
May 02 Javascript
详解vuejs之v-for列表渲染
Jun 22 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
Jul 17 jQuery
node Buffer缓存区常见操作示例
May 04 Javascript
微信小程序如何获取用户头像和昵称
Sep 23 Javascript
浅谈vuex的基本用法和mapaction传值问题
Nov 08 Javascript
js实现点击生成随机div
Jan 16 Javascript
vue实现简单学生信息管理
May 30 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中数组的三种排序方法分享
2012/05/07 PHP
PHP file_get_contents设置超时处理方法
2013/09/30 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
jquery实现搜索框功能实例详解
2018/07/23 jQuery
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
记录一次开发微信网页分享的步骤
2019/05/07 Javascript
JS数组扁平化(flat)方法总结详解
2019/06/24 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
[03:57]2016完美“圣”典风云人物:rOtk专访
2016/12/09 DOTA
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
Python设计模式之观察者模式实例
2014/04/26 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
python 基于opencv实现图像增强
2020/12/23 Python
html5视频播放_动力节点Java学院整理
2017/07/13 HTML / CSS
喜诗官方在线巧克力店:See’s Candies
2017/01/01 全球购物
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
环保倡议书范文
2014/05/12 职场文书
详解jQuery的核心函数和事件处理
2022/02/18 jQuery