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 相关文章推荐
JQuery页面的表格数据的增加与分页的实现
Dec 10 Javascript
jqeury-easyui-layout问题解决方法
Mar 24 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
Apr 12 Javascript
在HTML中插入JavaScript代码的示例
Jun 03 Javascript
JavaScript中的toLocaleDateString()方法使用简介
Jun 12 Javascript
跟我学习javascript的prototype使用注意事项
Nov 17 Javascript
创建自己的jquery表格插件
Nov 25 Javascript
JS高仿抛物线加入购物车特效实现代码
Feb 20 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
Jul 05 Javascript
jQuery实现的页面弹幕效果【测试可用】
Aug 17 jQuery
js前端面试之同步与异步问题详解
Apr 03 Javascript
解决layui数据表格Date日期格式的回显Object的问题
Sep 19 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下保存远程图片到本地的办法
2010/08/08 PHP
PHP中实现生成静态文件的方法缓解服务器压力
2014/01/07 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
2014/12/24 PHP
javascript Keycode对照表
2009/10/24 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
2013/01/17 Javascript
JS注释所产生的bug 即使注释也会执行
2013/11/19 Javascript
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
vue proxy 的优势与使用场景实现
2020/06/15 Javascript
ES11屡试不爽的新特性,你用上了几个
2020/10/21 Javascript
Python使用functools实现注解同步方法
2018/02/06 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
夜大毕业自我鉴定
2013/10/11 职场文书
金融行业务员的自我评价
2013/12/13 职场文书
高中军训感言800字
2014/03/05 职场文书
退休教师欢送会主持词
2014/03/31 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
2014年党员自我评议(5篇)
2014/09/12 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
2016春季幼儿园大班开学寄语
2015/12/03 职场文书
python基础学习之生成器与文件系统知识总结
2021/05/25 Python