cookie是网站设计者放置在客户端的小文本文件,一般后台语言使用的比较多,可以实现用户个性化的一些需求。
javascript使用 document.cookie 来操作cookie
同一个域名下的页面,共有一个cookie
不同的浏览器分别管理自己的cookie,互不影响
1.设置cookie
// 设置cookie function setCookie(c_name, value, expiredays) { var exdate = new Date(); exdate.setDate(exdate.getDate() + expiredays); document.cookie = c_name + "=" + escape(value) + "; expires=" + exdate.toGMTString() + "; path=/"; }
2.读取cookie
// 读取cookie function getCookie(c_name) { if (document.cookie.length > 0) { c_start = document.cookie.indexOf(c_name + "=") if (c_start != -1){ c_start = c_start + c_name.length + 1 c_end = document.cookie.indexOf(";", c_start) if (c_end == -1) c_end = document.cookie.length return unescape(document.cookie.substring(c_start, c_end)) } } return "" }
3.检查cookie
// 检查cookie function checkCookie(c_name) { username = getCookie(c_name); console.log(username); if (username != null && username != "") { return true; } else { return false; } }
4.清除cookie
// 清除cookie function clearCookie(name) { setCookie(name, "", -1); }
我们知道COOKIE保存在客户端,但是我们在设置和读取COOKIE的时候几乎无论使用什么语言编程都是在服务器端操作的,原理是通过HTTP的header传输信息。其实客户端的脚本语言JavaScript也是可以操作COOKIE的,默认情况下服务器端设置的COOKIE数据也是可以操作的,下面给出封装好的函数。
/*设置cookie*/ function setCookie(name,value,expires) { var exp = new Date(); exp.setTime(exp.getTime() + expires*1000); document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString(); } //获取cookie function getCookie(name) { var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)")); if(arr != null) return unescape(arr[2]); return false; }
其实服务器端程序设置的COOKIE如果不希望COOKIE读取也是可以的,以PHP为例可以在使用setcookie的时候第七个参数即httponly设置为true,这样使用Js就无法读取了,并且更安全可以防止XSS窃取cookie,代码大致如下,更为详细的参数解释可以参考PHP手册。
setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1,true);
JS 中 cookie 的使用
1、cookie 是什么?
①、cookie 是存储于访问者计算机中的变量。每当一台计算机通过浏览器来访问某个页面时,那么就可以通过 JavaScript 来创建和读取 cookie。
②、实际上 cookie 是存于用户硬盘的一个文件,这个文件通常对应于一个域名,当浏览器再次访问这个域名时,便使这个cookie可用。因此,cookie可以跨越一个域名下的多个网页,但不能跨越多个域名使用。
③、不同浏览器对 cookie 的实现也不一样。即保存在一个浏览器中的 cookie 到另外一个浏览器是 不能获取的。
PS:cookie 和 session 都能保存计算机中的变量,但是 session 是运行在服务器端的,而客户端我们只能通过 cookie 来读取和创建变量
2、cookie 能做什么?
①、用户在第一次登录某个网站时,要输入用户名密码,如果觉得很麻烦,下次登录时不想输入了,那么就在第一次登录时将登录信息存放在 cookie 中。下次登录时我们就可以直接获取 cookie 中的用户名密码来进行登录。
PS:虽然 浏览器将信息保存在 cookie 中是加密了,但是可能还是会造成不安全的信息泄露
②、类似于购物车性质的功能,第一次用户将某些商品放入购物车了,但是临时有事,将电脑关闭了,下次再次进入此网站,我们可以通过读取 cookie 中的信息,恢复购物车中的物品。
PS:实际操作中,这种方法很少用了,基本上都是将这些信息存储在数据库中。然后通过查询数据库的信息来恢复购物车里的物品
③、页面之间的传值。在实际开发中,我们往往会通过一个页面跳转到另外一个页面。后端服务器我们可以通过数据库,session 等来传递页面所需要的值。但是在浏览器端,我们可以将数据保存在 cookie 中,然后在另外页面再去获取 cookie 中的数据。
PS:这里要注意 cookie 的时效性,不然会造成获取 cookie 中数据的混乱。
3、怎么使用 cookie?
①、语法
document.cookie = "name=value;expires=evalue; path=pvalue; domain=dvalue; secure;”
②、对各个参数的解释
一、name=value 必选参数
这是一个键值对,分别表示要存入的 属性 和 值。
比如:
document.cookie="name=中文"; //为了防止中文乱码,我们可以使用encodeURIComponent()编码;decodeURIComponent()解码 document.cookie = encodeURIComponent("name")+"="+encodeURIComponent("中文");
二、expires=evalue 可选参数
该对象的有效时间(可选)只支持GTM 标准时间,即要将时间转换,toUTCString()(默认为当前浏览器会话有用,关闭浏览器就消失);
比如:
var date = new Date(); date.setTime(date.getTime()+2000);//获取当前时间并加上 2 秒钟 //alert(date.toUTCString());//格林威治时间 (GMT) 把 Date 对象转换为字符串,并返回结果。 //alert(date.toGMTString());//与上面的结果一样,但是这个方法已经被上面取代了 document.cookie="name=vae;expires="+date.toUTCString(); alert(document.cookie); // name=vae setTimeout(function(){alert(document.cookie)},4000);//4 秒后打印空的字符串
三、path=pvalue 可选参数
限制访问 cookie 的目录,默认情况下对于当前网页所在的同一目录下的所有页面有效
四、domain=dvalue 可选参数
用于限制只有设置了的域名才可以访问;如果没有设置,则默认在当前域名访问
比如设置 test*.com 表示域名为test*.com的服务器共享该Cookie
五、secure=true|false 可选参数,默认是 true 不安全传输
安全设置,指明必须通过 安全的通信通道来传输(https) 才能获得 cookie,true 不安全,默认值;false 安全,必须通过 https 来访问
比如:如果你设置 document.cookie = "name=vae;secure"
上面的代码如果是在 http 的协议中访问,那么是访问不了的
//设置 cookie function setCookie(objName, objValue, objHours){//添加cookie var str = objName + "=" + encodeURIComponent(objValue); if (objHours > 0) {//为0时不设定过期时间,浏览器关闭时cookie自动消失 var date = new Date(); var ms = objHours * 3600 * 1000; date.setTime(date.getTime() + ms); str += "; expires=" + date.toUTCString(); } document.cookie = str; } //获取 cookie function getCookie(objName){//获取指定名称的cookie的值 //多个cookie 保存的时候是以 ;空格 分开的 var arrStr = document.cookie.split("; "); for (var i = 0; i < arrStr.length; i++) { var temp = arrStr[i].split("="); if (temp[0] == objName){ return decodeURIComponent(temp[1]); }else{ return ""; } } } //为了删除指定名称的cookie,可以将其过期时间设定为一个过去的时间 function delCookie(name){ var date = new Date(); date.setTime(date.getTime() - 10000); document.cookie = name + "=a; expires=" + date.toUTCString(); }
注意:
(1)cookie可能被禁用。当用户非常注重个人隐私保护时,他很可能禁用浏览器的cookie功能; (2)cookie是与浏览器相关的。这意味着即使访问的是同一个页面,不同浏览器之间所保存的cookie也是不能互相访问的; (3)cookie可能被删除。因为每个cookie都是硬盘上的一个文件,因此很有可能被用户删除; (4)cookie安全性不够高。所有的cookie都是以纯文本的形式记录于文件中,因此如果要保存用户名密码等信息时,最好事先经过加密处理。
(5)cookie 在保存时,只要后面保存的 name 相同,那么就会覆盖前面的 cookie,注意是完全覆盖,包括失效时间,path 等等
综合自:
https://www.liminghulian.com/article/56
https://www.cnblogs.com/bossing/p/11021273.html
https://cloud.tencent.com/developer/article/1012509
本站文章除注明转载/出处外,均为原创,若要转载请务必注明出处。转载后请将转载链接通过邮件告知我站,谢谢合作。本站邮箱:admin@only4.work
尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。