localStorage & cookie

1. localStorage 本地存储

全局的对象
localStorage
对本地存储的操作(类似于操作数据库,类似于操作DOM)
增 删 改 查
ie7以上支持
标准浏览器
localStorage
设置:
localStorage.setItem(key,value);
获取:
localStorage.getItem(key) || null
删除:
localStorage.removeItem(key);
localStorage.clear();清除所有localStorage
注意:存的是文本,如果存数组,对象,转成字符串

storage事件

例子1:
    localStorage.setItem('hello','world')//存入形式:hello  world
    localStorage.setItem('num','123')//存入形式:num  123

    let obj = {'hello':'world'};
    localStorage.setItem('data',obj);//存入形式:[object Object]
    localStorage.setItem('data',JSON.stringify(obj));//用json转变之后:key = data value = {"hello":"world"}

    let arr = [1,2,3]
    add.onclick = function (){
        arr.push(1000000);
        localStorage.setItem('data2',arr);//1,2,3,1000000
        localStorage.setItem('data2',JSON.stringify(arr));//用json转变之后:key = data2 value = [1,2,3,1000000]
    };

实例1:购物车添加商品(不同窗口,同一个页面)
    <body>
		<h2>商品</h2>
		<div id="box">
			<span>鼠标</span>
			<span>键盘</span>
			<span>mac电脑</span>
			<span>耳机</span>
		</div>
		<hr>
		<h2>购物车</h2>
		<hr>
		<ul id="list">
			<!-- <li>11</li> -->
		</ul>


		<script>

		

		window.addEventListener('storage',function (){
			console.log('我改变了数据');
			// 触发这个事件的时候,拿到另外窗口添加到localStorage中的数据

			let data = localStorage.getItem('shop');  //[]
			// 把data转成数组 JSON.parse()
			let dataArr = JSON.parse(data);
			// 3. 更新值
			arr = dataArr;  // 当触发了storage说名有新数据,所以更新一下

			let html = dataArr.map((item) => {
				return `<li>${item}</li>`
			})

			list.innerHTML = html.join("");
		});

		let spans = box.getElementsByTagName("span");
		let list = document.getElementById('list');

		// 一进到页面中,先从localStorage中拿到数据,渲染在页面中

		let data = localStorage.getItem('shop');
		let dataArr = [];

		// 1. 先拿值

		// 如果数据存在是一个json的字符串
		if(data){
			// 把data转成数组 JSON.parse()
			dataArr = JSON.parse(data);

			let html = dataArr.map((item) => {
				return `<li>${item}</li>`
			})

			list.innerHTML = html.join("");
		}


		// arr初始值应该是从localStorage拿到的数组
		let arr = dataArr;  // 【键盘】

		for( var i = 0; i < spans.length; i++ ){
			spans[i].onclick = function (){

				arr.push(this.innerHTML)

				let newLi = `<li>${this.innerHTML}</li>`;
				list.innerHTML += newLi;

				// 放到localStorage中,每次存的时候不能是单独的一个值,而是一个数组
				//[1,2,3,4] = '1,2,3,4'
				// 2. 存值
				localStorage.setItem('shop',JSON.stringify(arr))
			};
		}

		</script>
	</body>

2. cookie 存储客户信息

http无状态的,使用cookie来记录登录状态,这个时候你在一个页面登录了,在同源下其他的页面也登陆了
document.cookie
可读可写
存cookie:document.cookie = “key=value”;
取cookie:document.cookie

  1. cookie是跟域名有关系的,不同域名不能共享cookie

  2. 当关闭浏览器的时候,cookie会自动清除;即cookie的生命周期,只有会话时间,浏览器会话结束,就删除。要保存cookie不清除,要设置过期时间;

  3. cookie大小有限制,浏览器不同设置的大小不同,在kb之前;
    4.设置cookie的过期时间,expires设置过期时间需要转为UTC 世界标准时间,调用toUTCString()方法即可;


例子1:
        document.cookie = 'hello1=world1'
        document.cookie = 'hello2=world2'
        document.cookie = 'hello3=world3'
        let d = new Date();
        //往当前时间推迟1分钟
        d.setMinutes(d.getMinutes()+1)
        //设置cookie的过期时间
        document.cookie = 'test=123; expires='+d.toUTCString()
        //document.cookie的格式:hello1=world1; hello2=world2;
        //中间以一个分号和一个空格间隔开,键值以 = 相连接
        console.log(document.cookie);//hello1=world1; hello2=world2;  hello3=world3; test=123;
        //当在一分钟之内关闭浏览器,再打开时,cookie中只保存了test:123,一分钟后test:123也被清除;

cookie方法封装:
        function setCookie(key,value,n){
			// n为0,已经设置了过期时间,设置cookie的那一刻是过期时间,停留一下就过期了
			if(n){
				let d = new Date();
				d.setDate(d.getDate()+n);
				document.cookie = key+'='+value+"; expires="+d.toUTCString();
			}else{
				document.cookie = key+'='+value;
			}
		}

		function getCookie(key){
			let cookies = document.cookie;
			cookies = cookies.split('; ');
			for( var i = 0; i < cookies.length; i++ ){
				let arr = cookies[i].split('=');
				if(arr[0] === key){
					return arr[1];
				}
			}
		}

		function removeCookie(key){
			//删除cookie
			setCookie(key,null,-1)	
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值