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 相关文章推荐
不同浏览器的怪癖小结
Jul 11 Javascript
js点击button按钮跳转到另一个新页面
Oct 10 Javascript
JavaScript构造函数详解
Dec 27 Javascript
分享一个插件实现水珠自动下落效果
Jun 01 Javascript
Bootstrap模态框使用详解
Feb 15 Javascript
详解webpack打包vue时提取css
May 26 Javascript
Bootstrap datepicker日期选择器插件使用详解
Jul 26 Javascript
ES6 javascript的异步操作实例详解
Oct 30 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
Apr 13 Javascript
基于ajax实现上传图片代码示例解析
Dec 03 Javascript
为什么推荐使用JSX开发Vue3
Dec 28 Vue.js
React如何使用axios请求数据并把数据渲染到组件
Aug 05 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实现选择排序的解决方法
2013/05/04 PHP
php的慢速日志引起的Mysql错误问题分析
2014/05/13 PHP
深入讲解PHP的Yii框架中的属性(Property)
2016/03/18 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
2017/08/09 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
Extjs学习笔记之三 extjs form更多的表单项
2010/01/07 Javascript
JavaScript类和继承 prototype属性
2010/09/03 Javascript
jquery的index方法实现tab效果
2011/02/16 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
javascript将数组插入到另一个数组中的代码
2013/01/10 Javascript
输入框过滤非数字的js代码
2014/09/18 Javascript
Javascript中For In语句用法实例
2015/05/14 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
js 作用域和变量详解
2017/02/16 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
详解js获取video任意时间的画面截图
2019/04/17 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
Quasar Input:type="number" 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
Python EOL while scanning string literal问题解决方法
2020/09/18 Python
wxPython使用系统剪切板的方法
2015/06/16 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
Python批量发送post请求的实现代码
2018/05/05 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
2020/03/13 Python
纯CSS3代码实现switch滑动开关按钮效果
2016/08/30 HTML / CSS
使用Html5实现异步上传文件,支持跨域,带有上传进度条
2016/09/17 HTML / CSS
EMPHASIS艾斐诗官网:周生生旗下原创精品珠宝品牌
2020/12/17 全球购物
国贸专业的职业规划范文
2014/01/23 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
Java 超详细讲解ThreadLocal类的使用
2022/04/07 Java/Android
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技