JavaScript cookie原理及使用实例


Posted in Javascript onMay 08, 2020

什么是cookie?

cookie 是本地计算机的临时存储。

作用:在浏览器中进行数据的存储,用户名、密码(比如:保存页面信息,自动登录等)。

特点:

  • cookie需要在服务器环境下运行;
  • cookie的容量在4kb左右,限制为每个域名50个cookie个数(IE),不同浏览器容量和个数不同;
  • cookie以字符串类型存储,不同域名存储的数据是无法共享;
  • cookie默认是临时存储的,当浏览器关闭时,自动销毁;
  • cookie可以被禁用也可以删除,且安全性不高。
  • 可以对cookie值进行加密(MD5);

读取和设置cookie

document.cookie = "user=123456";
console.log(document.cookie); //user=123456

使用f12查看当前页面存储的cookie

JavaScript cookie原理及使用实例

注意:

在打开网址时或者提交表单时自动裹挟着cookie数据发送到服务器,并且服务端程序可以 继续裹挟着新的cookie内容存储在你的电脑的cookie中。

设置cookie的生存期

格式:document.cookie = “名称=值;expires=” + 时间;(时间必须是一个字符串)。

var date=new Date();
date.setHours(date.getHours()+1);//设置1小时的生存期
// document.cookie="a=3"; //先存入a=3,只运行第一次
console.log(document.cookie);
var a=Number(document.cookie.split("=")[1]);
a++;
document.cookie="a="+a+";expires="+date.toUTCString();

上面代码表示:设置cookie在当前时间的一个小时后过期,第一次运行先存入a为3的值,然后把cookie的值从字符串转为数值型,再进行累加,每次设置生存期都要把data对象转为字符串类型(toUTCString)。

在生存期内的cookie,关闭页面不会销毁,生存期结束,关闭页面销毁cookie;

cookie存储多个数据

var obj={
      user:"xietian",
      age:30,
      sex:"男"
    }
    function setCookie(obj,date){
      for(var prop in obj){
        document.cookie=prop+"="+obj[prop]+(date ? ";expires="+date.toUTCString() : "");
      }
    }
    var date=new Date();
    date.setFullYear(2021); 
    setCookie(obj,date);

使用reduce获取多个cookie值

var o=getCookie();
   console.log(o);
    function getCookie(){
      return document.cookie.split("; ").reduce((value,item)=>{
          var arr=item.split("=");
          value[arr[0]]=isNaN(arr[1]) ? arr[1] : Number(arr[1]);//数字(年龄)需要转为数值型
          return value;
      },{});
    }

关于cookie安全

XSS攻击:XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序(百度百科)。

XSS攻击需要具备的条件:

1. 必须是同一个域当中页面的表单提交,必须有文本内容提交

2. 提交的内容需要被放置在页面中,例如评论等内容

3. 在提交的文本中出现script标签,并且这个标签没有被替代,直接放入在页面中

4. 这个页面可以被所有用户查看到

5. 这个script标签具备一定的盗窃cookie特征

解决办法

提交页面时将script标签过滤再提交;

但可以通过插入图片的超链接,点击是执行JavaScript脚本; 遇到这种时就需要将JavaScript脚本替换

关于cookie安全还要其他攻击方式这里只简单介绍一下cookie,深入了解请上网查询资料。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Dom加载让图片加载完再执行的脚本代码
May 15 Javascript
JS OOP包机制,类创建的方法定义
Nov 02 Javascript
Javascript延迟执行实现方法(setTimeout)
Dec 30 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
Jun 20 Javascript
IE6下opacity与JQuery的奇妙结合
Mar 01 Javascript
jQuery Masonry瀑布流插件使用详解
Nov 17 Javascript
jQuery+css实现的tab切换标签(兼容各浏览器)
Jan 28 Javascript
AngularJS过滤器详解及示例代码
Aug 16 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
Sep 04 Javascript
JSON.stringify()方法讲解
Jan 31 Javascript
原生js通过一行代码实现简易轮播图
Jun 05 Javascript
vue组件添加事件@click.native操作
Oct 30 Javascript
JavaScript中的各种宽高属性的实现
May 08 #Javascript
element-ui 实现响应式导航栏的示例代码
May 08 #Javascript
JS控制下拉列表左右选择实例代码
May 08 #Javascript
VSCode搭建React Native环境
May 07 #Javascript
Javascript查看大图功能代码实现
May 07 #Javascript
用VsCode编辑TypeScript的实现方法
May 07 #Javascript
JavaScript交换变量的常用方法小结【4种方法】
May 07 #Javascript
You might like
PHP+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
php遍历数组的4种方法总结
2014/07/05 PHP
php微信开发之谷歌测距
2018/06/14 PHP
PHP使用CURL实现下载文件功能示例
2019/06/03 PHP
javascript中获取选中对象的类型
2007/04/02 Javascript
Jquery进度条插件 Progress Bar小问题解决
2011/07/12 Javascript
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
2013/07/15 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
详解Vuex管理登录状态
2017/11/13 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
js实现各浏览器全屏代码实例
2018/07/03 Javascript
vue watch深度监听对象实现数据联动效果
2018/08/16 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
在Python中使用成员运算符的示例
2015/05/13 Python
python开发中module模块用法实例分析
2015/11/12 Python
详解使用python crontab设置linux定时任务
2016/12/08 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
梅西百货澳大利亚:Macy’s Australia
2017/07/26 全球购物
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
高中学生干部学习的自我评价
2014/02/21 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
2019年学校消防安全责任书(2篇)
2019/10/09 职场文书
Python实现自动玩连连看的脚本分享
2022/04/04 Python