美文网首页饥人谷技术博客
BOM_数据存储Cookie& localStorage

BOM_数据存储Cookie& localStorage

作者: YM雨蒙 | 来源:发表于2017-09-16 10:37 被阅读124次

window.onload 和 document.onDOMContentLoaded 有什么区别?

//页面所有资源加载完成
window.onload = function(){
  console.log('window loaded')
}
//DOM结构解析完成
document.addEventListenner("DOMContentLoaded",function(){
  console.log("DOMContentLoaded")
})

如何获取图片真实的宽高

 document.addEventListener('DOMContentLoaded', function(){
    console.log('DOMContentLoaded ')
  })

    console.log($('img').width) //0
    $('img').onload = function(){  //图片请求到了,触发事件
        console.log(this.width)   //此时才能得到图片的真实大小
  }

如何获取元素的真实宽高

window.getComputedStyle(node).height/width返回的是相应的宽高,单位为像素.

URL 如何编码解码?为什么要编码?

  • JavaScript提供四个URL的编码/解码方法。
    • decodeURI()
    • decodeURIComponent()
    • encodeURI()
    • encodeURIComponent()
encodeURI方法不会对下列字符编码

1. ASCII字母
2. 数字
3. ~!@#$&*()=:/,;?+'

encodeURIComponent方法不会对下列字符编码
1. ASCII字母
2. 数字
3. ~!*()'

为什么编码?

  • 为什么需要Url编码,通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所 以要进行编码,是因为Url中有些字符会引起歧义
  • Url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc&ie=utf- 8。如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和=符号进行转义, 也就是对其进行编码
  • Url的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不能在Url中包含任何非ASCII字符,例如中文。否则如果客户端浏 览器和服务端浏览器支持的字符集不同的情况下,中文可能会造成问题

补全如下函数,判断用户的浏览器类型

function isAndroid(){
}
funcnction isIphone(){
}
function isIpad(){
}
function isIOS(){
}
function isAndroid(){
    return /Android/.test(navigator.userAgent);
}
funcnction isIphone(){
    return /iPhone/.test(navigator.userAgent);
}
function isIpad(){
    return /iPad/.test(navigator.userAgent);
}
function isIOS(){
    return /(iPad)|(iPhone)/i.test(navigator.userAgent);
}

cookie & session &localStorage 分别是什么

看到cookie,是不是想到了饼干,哈哈,今天我们要说的可不是饼干,今天我们要说的是浏览器的cookie

什么是cookie呢?

  • cookie是存储在浏览器上的一小段数据,用来记录某些当页面关闭或者刷新后仍然需要记录的信息。在控制台用 「document.cookie」查看你当前正在浏览的网站的cookie。

如何设置?

  • 服务器端
    • 可以通过在http返回里面设置Set-cookie值告诉浏览器
  • 浏览器端
    • 打开浏览器调试器,选到Application,找到cookie选项
找到cookie

cookie属性

属性名 默认值 作用
Name(必填)
Value(必填)
Domain 当前文档域 作用域
Path 当前文档路径 作用路径
Expires/Max-age 浏览器会话时间 失效时间
secure false htttps协议时生效

作用域

作用域
作用路径 作用路径

Cookie -> javascript对象

cookie信息
//转化为js对象
function getcookie () {
    var cookie = {};
    var all = document.cookie;
    if (all === '')
        return cookie;
    var list = all.split('; ');
    for (var i = 0; i < list.length; i++) {
        var item = list[i];
        var p = item.indexOf('=');
        var name = item.substring(0, p);
        name = decodeURIComponent(name);
        var value = item.substring(p + 1);
        value = decodeURIComponent(value);
        cookie[name] = value;
    }
    return cookie;
}

cookie的设置/修改

//设置
document.cookie = "name = value"
//修改
function setCookie (name, value, expires, path, domain, secure) {
    var cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value);
    if (expires)
        cookie += '; expires=' + expires.toGMTString();
    if (path)
        cookie += '; path=' + path;
    if (domain)
        cookie += '; domain=' + domain;
    if (secure)
        cookie += '; secure=' + secure;
    document.cookie = cookie;
}

删除cookie

function removeCookie (name, path, domain) {
    document.cookie = name + '='
    + '; path=' + path
    + '; domain=' + domain
    + '; max-age=0';
}

缺陷

  • 流量代价
  • 安全性问题
  • 大小限制

Storage

  • local Storage
  • session Storage
Storage

因为cookie有这么一些缺陷,所以HTML5提供了storage存储替代方案

localStorage

  • 用于将大量数据(最大5M)保存在浏览器中,保存后数据永远存在不会失效过期,除非用 js手动清除。
  • 不参与网络传输。
  • 一般用于性能优化,可以保存图片、js、css、html 模板、大量数据。

可以理解js对象

  • 读取
    • localStorage.name
  • 添加/修改
    • localStorage.name = 'value'(string)
  • 删除
    • delete localStorage.name

API

  • 获取键值对数量
    • localStorage.length
  • 读取
    • localStorage.getItem("name"),localStorage.key(i)
  • 添加/修改
    • localStorage.setItem("name","value")
  • 删除对应键值
    • localStorage.removeItem("name")
  • 删除所有数据
    • localStorage.clear()
测试API 测试OK

session

当一个用户打开淘宝登录后,刷新浏览器仍然展示登录状态。服务器如何分辨这次发起请求的用户是刚才登录过的用户呢?这里就使用了session保存状态。用户在输入用户名密码提交给服务端,服务端验证通过后会创建一个session用于记录用户的相关信息,这个 session 可保存在服务器内存中,也可保存在数据库中。

  • 创建session后,会把关联的session_id 通过setCookie 添加到http响应头部中。
  • 浏览器在加载页面时发现响应头部有 set-cookie字段,就把这个cookie 种到浏览器指定域名下。
  • 当下次刷新页面时,发送的请求会带上这条cookie, 服务端在接收到后根据这个session_id来识别用户。

cookie 是存储在浏览器里的一小段「数据」,而session是一种让服务器能识别某个用户的「机制」,session 在实现的过程中需要使用cookie。 二者不是同一维度的东西。

使用 localStorage封装一个 Storage 对象,达到如下效果

Storage.set('name', '饥人谷') 
Storage.set('age', 2, 30) ;  //设置 name 字段存储的值为'饥人谷'
Storage.set('teachers', ['ruoyu', 'fangfang', 'tom'],  60)

Storage.get('name')   // ‘饥人谷’
Storage.get('age')     //  如果不超过30秒,返回数字类型的2;如果超过30秒,返回 undefined,并且 localStorage 里清除 age 字段
Storage.get('teachers')  //如果不超过60秒,返回数组; 如果超过60秒,返回undefined
var Storage = (function(){
  return {
    set: function(key, value, expireSeconds){
      localStorage[key] = JSON.stringify({
        value: value, 
        expired: expireSeconds===undefined?undefined:Date.now() + 1000*expireSeconds
      })
    },
    get: function(key){
      if(localStorage[key] === undefined){
        return
      }
      var o = JSON.parse(localStorage[key])
      if(o.expired === undefined || Date.now() < o.expired){
        return o.value
      }else{
        delete localStorage[key]
      }
    }
 }
})()

相关文章

  • BOM_数据存储Cookie& localStorage

    window.onload 和 document.onDOMContentLoaded 有什么区别? 如何获取图片...

  • TodoList-React

    要实现的功能 localStorage存储数据 使用localStorage存储用户数据,异步更新数据,实现在使用...

  • web存储、应用缓存、web workers

    客户端存储数据 两种方式: localStorage-没有时间限制的数据存储存储特点: localStorage方...

  • 2018-06-22

    localStorage--如何存储json数据? localStorage--如果直接将json存储在local...

  • 本地存储 与 cookie

    一、本地存储: (1)localStorage 保存数据:localStorage.setItem(key,...

  • Vue数据存储和页面传值

    数据存储和页面传值 数据存储 Vue 数据存储方法有Vuex、LocalStorage、SessionStorag...

  • 购物车

    web本地存储主要有两种方式: LocalStorage:localStorage 方法存储的数据没有时间限制。第...

  • localStorage本地缓存

    清空localStorage (clear) 存储数据 (setItem) 读取数据 (getItem) 删除某个...

  • localStorage存储数据

    介绍 localStorage: localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上...

  • HTML5 Web 存储(localStorage 和 sess

    localStorage 和 sessionStorage 客户端存储数据的两个对象为: localStorage...

网友评论

    本文标题:BOM_数据存储Cookie& localStorage

    本文链接:https://www.haomeiwen.com/subject/qidysxtx.html