前端基础(三十九):浏览器本地存储 - cookie、localStorage、sessionStorage

cookie存储

  • cookie若不设置过期时间关闭浏览器后会自动清除数据
  • 存储限制4k
  • 同地址下其他文件也能读取到
<form action="">
    用户名:<input type="text" id="username" value="" /> 
    密码:<input type="password" id="userpassword" value="" />
    <input type="checkbox" id="remember" onclick="rememberValue(this)">
    <label for="remember">记住账号密码</label>
</form>
/**
 * cookie用字符串拼接即可
 * cookie后可接
 * ; path=path
 * ; domain=domain
 * ; secure
 */

/**
 * [setCookie 设置cookie]
 * @param {[String]} c_name  [起个名,独一无二的名字]
 * @param {[String]} c_value [需要存的值]
 * @param {[Number]} exdays  [时间/天数,设置保存时间  0时为删除]
 */
function setCookie(c_name, c_value, exdays) {
    
    
    document.cookie = c_name + "=" + encodeURIComponent(c_value) + "; max-age=" + (exdays*60*60*24);// 解决符号转码
}

/**
 * 读取cookies
 * @param  {[String]} c_name [读取名字]
 * @return {[String]}        [返回读取cookie的值]
 */
function getCookie(c_name) {
    
    
    var name = c_name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
    
    
        var c = decodeURIComponent(ca[i].trim());// 解码
        if (c.indexOf(name) == 0){
    
    
            return c.substring(name.length, c.length);
        }
    }
    return "";
}

// 使用示例
var username = document.getElementById("username"); // 获取input username
var userpwd = document.getElementById("userpassword"); // 获取input userpassword
var remember = document.getElementById("remember"); // 获取记住账号密码

/**
 * 点击复选框记住 账号、密码、复选框
 */
function rememberValue() {
    
    
    if (remember.checked == true) {
    
    
        setCookie('user', username.value);// 临时
        setCookie('pwd', userpwd.value, 30);
        setCookie('remember', remember.checked, 30);
    } else {
    
    
        setCookie("user","",0);
        setCookie("pwd","",0);
        setCookie("remember","",0);
    }
}

/**
 * 页面加载完毕后从cookie里读取值并填入相应的标签内
 */
window.onload = function () {
    
    
    username.value = getCookie("user");
    userpwd.value = getCookie("pwd");
    remember.checked = getCookie("remember");
}

localStorage存储

  • 存储上限限制:不同的浏览器存储的上限也不一样,但大多数浏览器把上限限制在5MB以下。
  • localStorage与sessionStorage的区别:就是localStorage属于永久性存储,而sessionStorage属于当会话结束的时候,sessionStorage中的键值对会被清空
  • 关闭浏览器后,再打开仍有数据
  • 清除缓存加载后仍有数据
  • 同网络地址页面均能得到数据
<form action="">
    用户名:
    <input type="text" id="username" value="" /> 密码:
    <input type="password" id="userpassword" value="" />
    <input type="checkbox" id="remember" onclick="rememberValue(this)">
    <label for="remember">记住账号密码</label>
</form>
// localStorage使用示例
var username = document.getElementById("username"); // 获取input username
var userpwd = document.getElementById("userpassword"); // 获取input userpassword
var remember = document.getElementById("remember"); // 获取记住账号密码
// 点击复选框记住 账号、密码、复选框
function rememberValue() {
    
    
    if (remember.checked == true) {
    
    
        localStorage.setItem('user', username.value);
        localStorage.setItem('pwd', userpwd.value);
        localStorage.setItem('remember', remember.checked);
    } else {
    
    
        localStorage.removeItem("user");
        localStorage.removeItem("pwd");
        localStorage.removeItem("remember");
        // localStorage.clear();// 全部删除
    }
}
// 页面加载完毕后从localStorage里读取值并填入相应的标签内
window.onload = function () {
    
    
    username.value = localStorage.getItem("user");
    userpwd.value = localStorage.getItem("pwd");
    remember.checked = localStorage.getItem("remember");
}

sessionStorage存储

  • 关闭浏览器再打开将不保存数据
  • 复制标签页会连同sessionStorage数据一同复制
  • 复制链接地址打开网页不会复制seessionStorage内的数据
  • 清除缓存加载当前页对页面无影响
  1. 同源策略限制。若想在不同页面之间对同一个sessionStorage进行操作,这些页面必须在同一协议、同一主机名和同一端口下。(IE 8和9存储数据仅基于同一主机名,忽略协议(HTTP和HTTPS)和端口号的要求)
  2. 单标签页限制。sessionStorage操作限制在单个标签页中,在此标签页进行同源页面访问都可以共享sessionStorage数据。
  3. 只在本地存储。seesionStorage的数据不会跟随HTTP请求一起发送到服务器,只会在本地生效,并在关闭标签页后清除数据。(若使用Chrome的恢复标签页功能,seesionStorage的数据也会恢复)。
  4. 存储方式。seesionStorage的存储方式采用key、value的方式。value的值必须为字符串类型(传入非字符串,也会在存储时转换为字符串。true值会转换为"true")。
  5. 存储上限限制:不同的浏览器存储的上限也不一样,但大多数浏览器把上限限制在5MB以下。
<form action="">
    用户名:
    <input type="text" id="username" value="" /> 密码:
    <input type="password" id="userpassword" value="" />
    <input type="checkbox" id="remember" onclick="rememberValue(this)">
    <label for="remember">记住账号密码</label>
</form>
// sessionStorage使用示例
var username = document.getElementById("username"); // 获取input username
var userpwd = document.getElementById("userpassword"); // 获取input userpassword
var remember = document.getElementById("remember"); // 获取记住账号密码
// 点击复选框记住 账号、密码、复选框
function rememberValue() {
    
    
    if (remember.checked == true) {
    
    
        sessionStorage.setItem('user', username.value);
        sessionStorage.setItem('pwd', userpwd.value);
        sessionStorage.setItem('remember', remember.checked);
    } else {
    
    
        sessionStorage.removeItem("user");
        sessionStorage.removeItem("pwd");
        sessionStorage.removeItem("remember");
        // sessionStorage.clear();// 全部删除
    }
}
// 页面加载完毕后从sessionStorage里读取值并填入相应的标签内
window.onload = function () {
    
    
    username.value = sessionStorage.getItem("user");
    userpwd.value = sessionStorage.getItem("pwd");
    remember.checked = sessionStorage.getItem("remember");
}

测试浏览器的存储上限

http://dev-test.nemikor.com/web-storage/support-test/

猜你喜欢

转载自blog.csdn.net/weixin_43526371/article/details/125652661