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 相关文章推荐
JavaScript对象之间的转换 jQuery对象和原声DOM
Mar 07 Javascript
javascript面向对象入门基础详细介绍
Sep 05 Javascript
jquery无法设置checkbox选中即没有变成选中状态
Mar 27 Javascript
jQuery中:lt选择器用法实例
Dec 29 Javascript
jquery手风琴特效插件
Feb 04 Javascript
node.js使用cluster实现多进程
Mar 17 Javascript
jquery动态切换背景图片的简单实现方法
May 14 Javascript
vue使用axios实现文件上传进度的实时更新详解
Dec 20 Javascript
vue axios请求超时的正确处理方法
Apr 02 Javascript
微信小程序封装的HTTP请求示例【附升级版】
May 11 Javascript
详解关闭令人抓狂的ESlint 语法检测配置方法
Oct 28 Javascript
react基本安装与测试示例
Apr 27 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之第十天
2006/10/09 PHP
PHP字符串 ==比较运算符的副作用
2009/10/21 PHP
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
js正则表达exec与match的区别说明
2014/01/29 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
jQuery实现跟随鼠标运动图层效果的方法
2015/02/02 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
2015/03/04 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
javascript表单控件实例讲解
2016/09/13 Javascript
Angular Module声明和获取重载实例代码
2016/09/14 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
Vue性能优化的方法
2020/07/30 Javascript
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
2款Python内存检测工具介绍和使用方法
2014/06/01 Python
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
pycharm新建一个python工程步骤
2019/07/16 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
python反爬虫方法的优缺点分析
2020/11/25 Python
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
2012/05/30 面试题
产品销售员岗位职责
2013/12/18 职场文书
人事经理岗位职责
2014/04/28 职场文书
单位在职证明书
2014/09/11 职场文书
教师群众路线心得体会
2014/11/04 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
再见,2019我们不负使命;你好,2020我们砥砺前行
2020/01/03 职场文书