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实现仿京东商城省市联动菜单
Nov 19 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
Jul 14 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
Oct 17 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
Dec 28 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
Feb 12 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
Nov 22 Javascript
JavaScript寄生组合式继承实例详解
Jan 06 Javascript
Vue+element-ui 实现表格的分页功能示例
Aug 18 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
Oct 22 Javascript
javascript 高级语法之继承的基本使用方法示例
Nov 11 Javascript
koa2 数据api中间件设计模型的实现方法
Jul 13 Javascript
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
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实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
一个php短网址的生成代码(仿微博短网址)
2014/05/07 PHP
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
javascript 获取图片尺寸及放大图片
2013/09/04 Javascript
分享几种比较简单实用的JavaScript tabel切换
2015/12/31 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
2016/05/16 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
微信小程序仿RadioGroup改变样式的处理方案
2018/07/13 Javascript
Electron autoUpdater实现Windows安装包自动更新的方法
2018/12/24 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
2020/07/28 Javascript
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
python实现异步回调机制代码分享
2014/01/10 Python
python开发之函数定义实例分析
2015/11/12 Python
浅谈python中列表、字符串、字典的常用操作
2017/09/19 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
Django项目创建到启动详解(最全最详细)
2019/09/07 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
应届毕业生求职信范文分享
2013/12/26 职场文书
思想汇报格式
2014/01/05 职场文书
违纪检讨书2000字
2014/02/08 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
2015年青年教师工作总结
2015/05/25 职场文书
go mod 安装依赖 unkown revision问题的解决方案
2021/05/06 Golang
GoLang中生成UUID唯一标识的实现
2021/05/08 Golang
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL
Python 中的Sympy详细使用
2021/08/07 Python
Mysql忘记密码解决方法
2022/02/12 MySQL