




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【什么是cookie】“cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。”w3school不同的浏览器可能对cookie的储存方式不同,但是相同的是cookie中的内容都是保存在客户一端的。(session是保存在服务器上的)【cookie的几点注意】说的通俗一点,cookie就是一个字符串(这点可以用alert(typeof document.cookie)来验证),用来保存一些客户信息。程序员可以对其写入任何想写入的东西,只要不超过cookie的大小限制(4kb)。cookie的操作办法最简单的说法就是对document.cookie进行操作(写入你要需保存的内容)。cookie有一个关键字是expires,它是用来设置cookie的有效期的,默认情况(不设置expires)是当浏览器关闭的时候,自动清除cookie。一般来说,cookie的形式都是这样的:cookieName1=cookie1;cookieName2=cookie2;expires= + date,这里需要注意几点:1.注意分号;expires=之前的字符串你可以随便写,但是;expires=必须遵循这个写法,尤其是这个分号不能少, 不然浏览器是认不出你的expires(过期时间),而把它当成cookie内容的一部分。例如:如果你写成 1 2 3 4 var date = new Date(); 5 date.setDate(date.getDate() + 10);/date设置为十天之后 6 document.cookie = username=findingseapassword=123expires= + date.toGMTString();/toGMTString方法将date转换成格林尼治时间格式 7 8 9 10 11 12 打开firefox下的选项-隐私-删除私人Cookie可以到cookie过期的时间为当前会话结束时,也就是浏览器关闭的时候。换而言之,就是我们设置的expires完全没有起作用。要fix也很容易,只要在上段代码中,在expires前加一个分号,也就是改成.;expires=, 重新运行firefox查看cookie可以看到过期时间为10之后(今天是2012年8月31日),expires设置成功,所以说分号很重要,很重要!2.如何清除cookie其实清除cookie这种说法是不准确的,应该是说让cookie过期。因为不能直接对cookie置空,(如果以为document.cookie=,这样就能清空cookie,我只能说少年你还是太天真了),而使cookie的方法也很简单,就是设置expires。我们可以把expires设置到很久以后,让cookie能长期保存,那同样我们也能把cookie设置到过去,让cookie马上过期。这个“过去”就是1970年1月1号,我们将expires设置到这个时间,cookie就过期了。至于为什么是这个时间,请参考关于1970-1-1 00:00.000的知识。3.如何设置和获取cookieJavaScript没有提供根据cookie名来获取cookie值的方法。上面已经讲过了,document.cookie只是一个字符串而已,我们就对其进行字符串解析即可。要在获取的时候进行解析,就要需要在设置的时候设置标识符,这里需要注意的点和第一点刚好相反,在第一点中,我们是千叮咛万嘱咐不要忘记分号,而且在设置标识符的时候,我建议尽量不要用分号当做分隔符,我们来看一下对比;代码1: 1 2 3 4 var date = new Date(); 5 date.setDate(date.getDate() + 10); 6 document.cookie = username=findingsea;password=123;expires= + date.toGMTString(); 7 8 9 10 11 12 效果:代码2: 1 2 3 4 var date = new Date(); 5 date.setDate(date.getDate() + 10); 6 document.cookie = username=findingseapassword=123;expires= + date.toGMTString(); 7 8 9 10 11 12 效果:可以很清楚地看到,代码1中的password=123都“吞掉了”,造成这个现象的原因是,浏览器在保存cookie的时候,在读到分号之后,就认为cookie的内容结束了,浏览器理想的cookie形式是cookieName=cookie;expires=date,但是显然我们并不满足这样,所以要在一条cookie中设置多个值,就需要像代码2这样用标示符(不要分号)进行分割。然后在读取的时候,也根据标示符进行逐个读取。当然当然当然,以上是正对相对复杂的需要我们在同一条cookie中设置多个变量的情况,更规范的情况是一条cookie就储存一个对象。不过这样的话,你的cookie就要占用更多的空间(相比于一条cookie中设置多个变量而已,因为你需要为每个cookie都设置一个expires)。不过这样的操作更加简单和规范,推荐在变量少的情况下使用。代码如下: 1 2 3 4 var date = new Date(); 5 date.setDate(date.getDate() + 10); 6 document.cookie = username=findingsea;expires= + date.toGMTString(); 7 document.cookie = password=123;expires= + date.toGMTString(); 8 alert(document.cookie) 9 10 11 12 13 14 效果:那这时候document.cookie里的值是多少?让我们alert一下:这个时候,你再去解析cookie的时候,就要用分号作为分隔符了。4.如何修改cookiedocument.cookie虽然是一个字符串,但是当你对它的内容进行修改的时候,浏览器先进行解析和查询,而不是直接的覆盖和修改。如果你要修改的cookie已经存在,那浏览器就对已存在的那个cookie进行修改,否则,浏览器会按照你的cookie名和cookie值新建一个cookie。代码: 1 2 3 4 var date = new Date(); 5 date.setDate(date.getDate() + 10); 6 document.cookie = username=findingsea;expires= + date.toGMTString(); 7 document.cookie = username=ly;expires= + date.toGMTString(); 8 document.cookie = password=123;expires= + date.toGMTString(); 9 alert(document.cookie)10 11 12 13 14 15 效果:可以看到当遇到之间已经定义过的cookie(username),浏览器会自己修改原来储存的值,而如果该cookie之间没有定义过(password),浏览器则会创建一个新的cookie。5.chrome不支持本地cookiechrome处于安全性考虑,不需要设置本地cookie,而需要用online-cookie。类似document.cookie=blablabla这样的代码在chrome下是无效的,cookie里还是空的,我也是上网上找了很多方法,都说要用online-cookie,但是也没人告诉我online-cookie到底要怎么用。所以这个问题至今没有解决,不过我会继续找解决办法,等我找到了再更新上来。感谢知乎大神对我这个弱智问题的不吝赐教,原帖地址。在此我犯了一个比较2的错误,chrome不支持本地cookie的意思是,不支持通过文件路径访问的js的cookie,就好比我写个html文件放在本地,里面有创建cookie的代码,直接用chrome打开这个html文件,创建cookie的代码是不会执行成功的,因为chrome阻止了对document.cookie的赋值。想要解决这个问题也很简单,就是通过来访问同一个文件,那你创建cookie的js代码就能正常执行了。【talk is cheap, show me the code.】OK,上code!(代码来自w3school的js操作cookie教程,经本人整理和个性化:) 1 2 3 4 5 6 function getCookie(c_name) /根据分隔符每个变量的值 7 8 if (document.cookie.length 0) 9 c_start = document.cookie.indexOf(c_name + =)10 if (c_start != -1) 11 c_start = c_start + c_name.length + 1;12 c_end = document.cookie.indexOf(,c_start);13 if (c_end=-1)14 c_end=document.cookie.length;15 return unescape(document.cookie.substring(c_start,c_end);16 17 18 return ;19 20 21 function setCookie(c_name, n_value, p_name, p_value, expiredays) /设置cookie22 23 var exdate = new Date();24 exdate.setDate(exdate.getDate() + expiredays);25 document.cookie = c_name + = + escape(n_value) + + p_name + = + escape(p_value) + (expiredays = null) ? : ;expires= + exdate.toGMTString();26 console.log(document.cookie)27 28 29 function checkCookie() /检测cookie是否存在,如果存在则直接读取,否则创建新的cookie30 31 alert(document.cookie)32 var username = getCookie(username);33 var password = getCookie(password);34 if (username != null & username != & password != null & password != ) 35 alert(Your name: + username + n + Your password: + password);36 37 else 38 username = prompt(Please enter your name:,);39 password = prompt(Please enter your name:,);40 if (username != null & username != & password != null & password !=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新疆应用职业技术学院《风景园林规划设计》2023-2024学年第一学期期末试卷
- 湘潭医卫职业技术学院《环境土壤学》2023-2024学年第二学期期末试卷
- 宫颈肿瘤的病理学课件
- 2025至2031年中国档发行业投资前景及策略咨询研究报告
- 2025汽车购车贷款合同范本
- 郑州商学院《高分子科学基础》2023-2024学年第二学期期末试卷
- 超声基础原理知识
- 楼盘房屋销售方案范本
- 2025标准中介房屋租赁合同(版)
- 2025至2031年中国后脚踏行业投资前景及策略咨询研究报告
- 小学生安全教育校本教材(中年级版)
- 中职语文 大国工匠——彭祥华
- 数字化语音存储与回放系统(毕业设计)
- 喜达屋明星服务
- 烟草企业安全生产标准化规范-第3部分-考核评价准则和方法
- 武汉市控制性详细规划编制技术规程610
- 电子显微分析试题集1
- ANCA相关性小血管炎
- 服装面料采购合同
- 斯伦贝谢定向钻井和旋转导向
- 大学语文(高职版) 教学课件 ppt 作者 徐中玉 44 论读书 第四十四课 论读书
评论
0/150
提交评论