先提一下:一定不要在 cookie 中存储重要和敏感的数据。cookie 数据并非存储在一个安全环境中,其中包含的任何数据都可以被他人访问。
数据持久化
也叫数据本地化,是一种将数据长久的保存在客户端的操作数据持久化
操作,能够实现网站的登录效果
,避免用户在网站页面间浏览的时候重复登录
,也能实现快速登录
,一段时间内保存用户的登录效果,提高页面访问速率可以认为是一
个记录了简单内容的文本文件 ,cookie是直接绑定在html页面之上的
(可视)查看:(F12)控制台->application->左边栏菜单->cookie
操作:cookie的设置分为前端和后端设置(php)两种
前端:(要注意前端操作cookie的时候时间要用toGMTString()方法转换成标准时才行)
写入cookie
:document.cookie=“key=value;(保存这一条cookie的键和值);expires=过期时间戳”;=>一个日期(DATE)对象读取
cookie:console.log(document.cookie);删除
:document.cookie=“key=value;(保存这一条cookie的键和值);expires=当前时间戳+1
”;(通过cookie自己的状态进行删除操作) <script>
var expires = new Date(new Date().getTime() + 1000 * 1000).toGMTString();
//console.log(expires);
//距离1970年的毫秒数(在之前的js一到五章的博客中已经提过)
//意思是这条cookie保存时间为当前时间的1000s之后,GMT改成标准时间
document.cookie = 'username=astra;expires='+expires;
</script>
<head>
<script>
function setCookie(cname,cvalue,exdays){
var d = new Date();
d.setTime(d.getTime()+(exdays*24*60*60*1000));
var expires = "expires="+d.toGMTString();
document.cookie = cname+"="+cvalue+"; "+expires;
}
function getCookie(cname){
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name)==0) { return c.substring(name.length,c.length); }
}
return "";
}
function checkCookie(){
var user=getCookie("username");
if (user!=""){
alert("欢迎 " + user + " 再次访问");
}
else {
user = prompt("请输入你的名字:","");
if (user!="" && user!=null){
setCookie("username",user,30);
}
}
}
</script>
</head>
<body onload="checkCookie()"></body>
1、限制
超过单个域名限制之后
还要再设置 cookie,浏览器就会清除以前设置的 cookie
尺寸
也有限制,如果超过了可能会被丢掉2、构成(六块信息)(图片引用于JavaScript高级程序设计)
最后一个标志表示这个cookie只能通过SSL链接才能传输
域、路径、失效时间和 secure 标志都是服务器给浏览器的
指示,以指定何时应该发送 cookie
。这些参数并不会作为发送到服务器的 cookie 信息的一部分,只有名值对才会被发送
document.cookie
属性(使用方法不同行为也会不同)
一系列名值对
)所有名字和值都是经过 URL 编码的,所以必须使用 ==decodeURIComponent()==来解码
会被解释并添加
到现有的 cookie 集合中不过不会覆盖原来的document.cookie = "name=Nicholas";
理解:上面这段代码表示创建了一个叫 name 的 cookie,值为 Nicholas,没有设置其他信息值(比如时间),所以
当浏览器关闭的时候,它就会被删除
其次,要注意一个点:最好每次设置 cookie 时都使用 encodeURI-
Component()
例如上面那个例子可以写一段这样的代码:
document.cookie = encodeURIComponent("name") + "=" +
encodeURIComponent("Nicholas");
读取写入和删除:可以看上面的总结和例子,删除的话
没有删除已有 cookie 的直接方法。所以,需要使用相同的路径、域和安全选项再次设置 cookie,并
将失效时间设置为过去的时间——《JavaScript高级程序设计》
4、子cookie
更小段的数据
。也就是使用 cookie 值来存储多个名值对它其实就是调用
getAll()
获取所有的子 cookie,然后只返回所需的那一个
所有的可选参数都是作用于cookie本身而非子cookie。为了在同一个cookie中存储多个子cookie,路径、域和secure
标志必须一致
为了确保确实是要保存的数据,使用了
hasOwnProperty() 方法
,来确保只有实例属性被序列化到子 cookie 中
unset: function (name, subName, path, domain, secure){
var subcookies = this.getAll(name);
if (subcookies){
delete subcookies[subName];
this.setAll(name, subcookies, null, path, domain, secure);
}
},
unsetAll: function(name, path, domain, secure){
this.setAll(name, null, new Date(0), path, domain, secure);
}
//仅删除名为 name 的子 cookie
SubCookieUtil.unset("data", "name");
//删除整个 cookie
SubCookieUtil.unsetAll("data");
理解:1、 unset() 方法用于删除某个 cookie 中的单个子 cookie
2、 unsetAll() 方法用于删除整个 cookie
作为请求头
发送,所以在 cookie 中存储大量信息
会影响到特定域的请求性能
。尽管浏览器对 cookie 进行了大小限制,本文地址:https://blog.csdn.net/Phoebe4/article/details/107571491
如对本文有疑问, 点击进行留言回复!!
网友评论