什么是Cookie?
Cookie是Web服务器在用户访问Internet站点时传递到Web浏览器的消息。浏览器会将每条消息以名称 – 值对的形式存储在用户计算机上的一个小文件中。当用户从服务器请求另一个页面时,浏览器会将cookie发送回服务器。这些文件通常包含有关用户访问网页的信息,以及用户自愿提供的任何信息,例如:用户信息,用户首选项,密码记住选项等。
使用Cookie的优点
1、Cookie易于使用和实现
实现cookie的使用要比任何其他Internet协议容易得多。
2、占用更少的内存
不需要任何服务器资源,并存储在用户的计算机上,因此不会给服务器带来额外的负担。
3、持久性
Cookie最强大的一个方面就是持久性。当在客户端的浏览器上设置Cookie时,它可以持续数天,数月甚至数年。这样可以轻松保存用户首选项和访问信息,并在用户每次返回站点时保持此信息可用。此外,由于Cookie存储在客户端的硬盘上,因此如果服务器崩溃,它们仍然可用。
4、 透明性
Cookie透明地工作,用户不知道需要存储的信息。
5、易于管理
大多数浏览器都可以让用户轻松清除浏览历史记录。只需转到工具,清除历史记录并选择Cookie即可。
Cookie存储在用户硬盘驱动器上的cookie.txt下的文本文件中,因为它是一个文本文件,我们可以使用任何查看器或文本编辑器来显示,编辑和删除它们。
使用Cookie的缺点
1、隐私问题
大多数用户主要关心的是隐私。启用Cookie的Web浏览器会跟踪您访问过的所有网站。这意味着,经许可(或不在Google的情况下),第三方可以访问这些cookie存储的信息。在某些情况下,这些第三方可以是广告商,其他用户。。。。
2、不安全
Cookie安全性是一个大问题,因为它们是以明文形式存储,可能会造成安全风险,因为任何人都可以打开并篡改cookie。
Cookie容易在客户端被发现意味着它们很容易被黑客入侵和修改。
3、难以解密
我们可以手动加密和解密cookie,但由于加密和解密所需的时间,它需要额外的编码并影响应用程序性能。
4、大小有限制,只能储存简单字符串信息
cookie文本的大小(一般为4kb),cookie的数量(一般每个站点20个)存在一些限制,每个站点只能容纳20个cookie。
Cookie仅限于简单的字符串信息,他们无法存储复杂的信息。
5、可以被禁用
用户可以选择从浏览器设置中禁用其计算机上的cookie。这意味着用户可以决定不在他的浏览器上使用cookie,这可能会在浏览器的运行中产生一些问题。
6、可以被删除
用户可以从其计算机中删除cookie,这使他们可以更好地控制cookie。
cookie自身是document对象的一个属性
使用:document.cookie
cookie的规则:要设置的cookie
document.cookie = 要设置的cookie
1.必须是字符:""
2.字符内的格式要求:名=值,如:"user=admin"
3.一条代码只能设置一条cookie
4.设置cookie时,可以配置信息要求
有效期:"expires=日期对象"
路径:"path=/page"
5.cookie的内容和每个配置信息之间用:";"连接
设置cookie的语法:
默认cookie
document.cookie = "user=admin";
设置具有有效期的cookie(3天之后)
var d = new Date();
d.getDate();获取当前当月天数
d.setDate(d.getDate() + 3); //获取指定日期
document.cookie = "abc=123;expires="+d;
设置具有路径的cookie(3天之后)
document.cookie = "abc=123;path=/page";
设置具有路径和有效期的cookie(3天之后)
var d = new Date();
d.setDate(d.getDate() + 3);
document.cookie = "abc=123;path=/page;expires="+d;
删除cookie:通过有效期,让这个cookie过期,怎么能过期?当前设置曾经的日期。
查cookie:
var str = document.cookie
str
cookie工作场景:
cookie自身其实对工作环境没有要求
但是cookie会随着http发往服务器
使用cookie的时候,是不是需要记录客户端和服务器之间的信息
客户端是浏览器,服务器是本地服务器
所以导致,cookie最好也在服务器环境中使用
1.cookie-function
<script type="text/javascript">
// localStorage方法
// localStorage.setItem("user","admin");
// localStorage.getItem("user");
// localStorage.removeItem("user");
// 封装
// 假设将来的cookie的使用方式为:
// // 设置一个默认的cookie
// setCookie("qwe","123");
// setCookie("asd","234",{});
// // 设置一个有有效期的cookie
// setCookie("zxc","345",{
// expires:5
// });
// // 设置一个有路径的cookie
// setCookie("abc","456",{
// path:"/"
// });
// // 设置一个既有有效期又有路径的cookie
// setCookie("hahaha","789",{
// expires:3,
// path:"/"
// });
// 设置cookie(可以实现修改)
function setCookie(key,val,ops){
// ops有可能为的值:
// undefined
// {}
// {expires:3}
// {path:"/"}
// {expires:3,path:"/"}
// 处理的是为undefined时
ops = ops || {};
// 处理有效期
let e = "";
if(ops.expires){
var d = new Date();
d.setDate( d.getDate() + ops.expires );
e = ";expires="+d;
}
// 处理路径
// let p = "";
// if(ops.path){
// p = ";path="+ops.path;
// }
let p = ops.path ? ";path="+ops.path : "";
document.cookie = `${key}=${val}${p}${e}`;
}
// console.log(getCookie("qwe"));
// console.log(getCookie("abc"));
// console.log(getCookie("user"));
function getCookie(key){
// 1.获取所有cookie
let strC = document.cookie;
// 2.使用"; "分割所有cookie,单独拿到每一条
let arrC = strC.split("; ");
// 3.遍历每一条cookie
for(var i=0;i<arrC.length;i++){
// 4.再次使用"="分割,分割成名字和值独立的状态
// 5.判断数组的第一位的名字是否与传进来要获取的cookie的名字一致
if(arrC[i].split("=")[0] === key){
// 6.如果一致,返回数组的第二位,也就是对应的值
return arrC[i].split("=")[1];
}
}
// 7.循环结束后,如果程序还在执行,说明没有找到一致的值,那就返回空字符
return "";
}
// 删除cookie
removeCookie("abc",{
path:"/"
});
// 删除cookie
function removeCookie(key,ops){
// 1.保证ops是个对象
ops = ops || {};
// 2.ops是对象了,无论如何得有个expires的属性为-1
ops.expires = -1;
// 3.将处理好的ops,给setCookie
setCookie(key,"suibianxie,danshibunengshenglue",ops);
}
</script>
2.cookie-test
封装cookie
设置cookie
function setCookie(key, value, indate) {
const time = +new Date() - 8 * 3600 * 1000 + indate * 1000;
document.cookie = ${key}=${value};expires=${time};
}
获取cookie
function getCookie(key) {
const cookieArr = document.cookie.split(’;’)
let value = ‘’;
cookieArr.forEach(item => {
if (item.split(’=’)[0] === key) {
value = item.split(’=’)[1]
}
})
return value
}
删除cookie
function delCookie(key) {
setCookie(key, “”, -1);