• 13、cookie


    一、cookie:

    1、cookie

    cookie的应用:
    1、用户名密码 自动登录
    2、购物车商品的保存。
    <1>缓存信息,只存储特定的重要的信息。程序编程完成。缓存信息cookie技术。
    <2>浏览器缓存

    cookie实现原理:
    在本地的客户端的磁盘上以很小的文件 形式保存数据。

    【注】IE、火狐、谷歌浏览器的cookie,在服务器环境下才能生效。

    cookie是一个字符串,键/值对组成的字符串。
    【注】1、name和value必须有的。
       2、大括号里面的键值对是可选项,按照需求进行添加。

    name=value;[expires=date];[path=path];[domain=somewhere.com];[secure]

    cookie设置成功以后,存储在,以当前url中域名命名的文件夹中

    name=value

    //设置cookie
    // document.cookie = "username=tianyufei";

    		//获取cookie
    
    		// alert(document.cookie);
    

    expires=日期对象
    过期日期:
    1、如果不设置,默认会话,当前会话结束的时候/当你关闭掉当前窗口的时候,cookie消失。

    		/*
    			n天后的日期
    		*/
    		function getNumOfDate(n){
    			var d = new Date();
    			var day = d.getDate();
    			d.setDate(day + n);
    			return d;
    		}
    		//http://10.30.155.73/cookie/01cookie.html
    		//http://localhost/cookie/01cookie.html
    		//http://127.0.0.1/cookie/01cookie.html
    		// alert(getNumOfDate(7));
    

    一般情况下,在存储cookie的时候
    1、现将中文转成字符存储。 utf-8(3个字符表示一个函数) gbk(2个字符表示一个汉字)
    2、读取,将字符转成中文读取。

    encodeURIComponent 编码
    decodeURIComponent 解码

                // document.cookie = "超级英雄=钢铁侠;expires=" + getNumOfDate(7);
    
    			// alert(document.cookie);
    
    			// document.cookie = encodeURIComponent("超级英雄") + "=" + encodeURIComponent("钢铁侠") + ";expires=" + getNumOfDate(7);
    
    			// alert(decodeURIComponent(document.cookie));
    

    了解:path、domain、secure

    path 限制访问路径
    如果不设置,默认是,当前加载的html页面的路径
    【注】访问的路径和存储cookie路径必须一致,不一致就禁止访问。

                // document.cookie = "username=tian;expires=" + getNumOfDate(7) + ";path=" + "/cookie/code/";
    
    			// alert(document.cookie);
    

    domain 限制访问域名 主机名/IP
    如果不设置,默认是,当前加载该页面的主机名。
    【注】如果存储cookie的时候,domain中设置的域名,和访问的域名不一样。存储cookie失败。

                /*document.cookie = "username=tian;expires=" + getNumOfDate(7) + ";domain=" + "10.30.155.74";
    			alert(1);*/
    

    secure 安全性
    默认false
    任何来源的网站都可以访问cookie,限制访问协议
    http https

    设置,变成true,只能被https协议访问。https协议更安全,证书认证。
    【注】只能由https协议访问和存储。

                document.cookie = "username=tian;expires=" + getNumOfDate(7) + ";secure";
    

    2、封装cookie

    设置cookie
    setCookie()

    取出cookie
    getCookie()

    删除cookie
    removeCookie()

    		//name=value;[expires=date];[path=path];[domain=somewhere.com];[secure]
    
    		/*
    			【注】expires 只穿过期的天数
    		*/
    		function setCookie(name, value, expires, path, domain, secure){
    			//1、编码去存  name=value
    			var cookieStr = encodeURIComponent(name) + "=" + encodeURIComponent(value);
    			//2、判断
    			if(expires){
    				cookieStr += ";expires=" + getNumOfDate(expires);
    			}
    			if(path){
    				cookieStr += ";path" + path;
    			}
    			if(domain){
    				cookieStr += ";domain" + domain;
    			}
    			if(secure){
    				cookieStr += ";secure";
    			}
    
    			document.cookie = cookieStr;
    		}
    
    		function removeCookie(name){
    			document.cookie = encodeURIComponent(name) + "=;expires=" + new Date(0);
    		}
    
    		/*
    			n天后的日期
    		*/
    		function getNumOfDate(n){
    			var d = new Date();
    			var day = d.getDate();
    			d.setDate(day + n);
    			return d;
    		}
    
    
    
    		setCookie("变种人", "镭射眼", 7);
    		setCookie("七龙珠", "弗利萨", 30);
    		setCookie("火影忍者", "鬼鲛", 100);
    
    		
    		// document.cookie = encodeURIComponent("变种人") + "=;expires=" + new Date(0);
    		/*
    			快速获取过去某一时刻
    		*/
    		// alert(new Date(0));
    
    
    		/*
    			变种人=镭射眼; 七龙珠=弗利萨; 火影忍者=鬼鲛
    		*/
    		/*
    			cookie 过期以后,就自动清除了
    			如果过期时间,设置,过去的某一个时间。
    			【注】删除cookie,过期时间设置成过去某一时刻。
    		*/
    
    
    
    		alert(decodeURIComponent(document.cookie));
    
    		removeCookie("变种人");
    		
    
    		alert(decodeURIComponent(document.cookie));
    

    3、对象传参,cookie封装_进阶

    		/*
    			【注】expires 只穿过期的天数
    		*/
    

    设置cookie
    setCookie()

    		function setCookie(name, value, expires, path, domain, secure){
    			//1、编码去存  name=value
    			var cookieStr = encodeURIComponent(name) + "=" + encodeURIComponent(value);
    			//2、判断
    			if(expires){
    				cookieStr += ";expires=" + getNumOfDate(expires);
    			}
    			if(path){
    				cookieStr += ";path=" + path;
    			}
    			if(domain){
    				cookieStr += ";domain=" + domain;
    			}
    			if(secure){
    				cookieStr += ";secure";
    			}
    
    			document.cookie = cookieStr;
    		}
    

    删除cookie
    removeCookie()

    		function removeCookie(name){
    			document.cookie = encodeURIComponent(name) + "=;expires=" + new Date(0);
    		}
    
    
    		/*
    			传入对应的键
    			返回对应的值
    
    			字符串处理
    		*/
    

    取出cookie
    getCookie()

    		function getCookie(name){
    			var cookieStr = decodeURIComponent(document.cookie);
    			var start = cookieStr.indexOf(name);
    			if(start == -1){
    				return null;
    			}else{
    				//找到了,找结束的位置
    				var end = cookieStr.indexOf(";", start);
    				if(end == -1){
    					//最后一个
    					end = cookieStr.length;
    				}
    			}
    			//提取键值对
    			var subStr = cookieStr.substring(start, end);
    			//变种人=镭射眼
    			var arr = subStr.split("=");
    			return arr[1];
    		}
    
    		/*
    			n天后的日期
    		*/
    		function getNumOfDate(n){
    			var d = new Date();
    			var day = d.getDate();
    			d.setDate(day + n);
    			return d;
    		}
    
    
    
    		setCookie("变种人", "镭射眼", 7);
    		setCookie("七龙珠", "弗利萨", 30);
    		setCookie("火影忍者", "鬼鲛", 100);
    
    		
    		// document.cookie = encodeURIComponent("变种人") + "=;expires=" + new Date(0);
    		/*
    			快速获取过去某一时刻
    		*/
    		// alert(new Date(0));
    
    
    		/*
    			变种人=镭射眼; 七龙珠=弗利萨; 火影忍者=鬼鲛
    		*/
    		/*
    			cookie 过期以后,就自动清除了
    			如果过期时间,设置,过去的某一个时间。
    			【注】删除cookie,过期时间设置成过去某一时刻。
    		*/
    
    		alert(getCookie("变种人"));  //0  7
    		alert(getCookie("七龙珠"));  //9  16
    		alert(getCookie("火影忍者"));//18  -1
    
    
    		/*alert(decodeURIComponent(document.cookie));
    
    		removeCookie("变种人");
    		
    
    		alert(decodeURIComponent(document.cookie));*/
    

    4、cookie究极封装

    前面的:
    设置cookie
    setCookie()
    取出cookie
    getCookie()
    删除cookie
    removeCookie()
    获取日期 getNumOfDate()
    都必须有.

    分析: $_cookie() 实现 setCookie getCookie removeCookie
    根据参数不同,可以将$_cookie设置三种不同的功能。

                    setCookie
    				$_cookie(name, value);
    				$_cookie(name, value, obj);
    
    				getCookie
    				$_cookie(name)
    
    				removeCookie
    				$_cookie(name, null);
    
                function $_cookie(name, value, obj){
    				//1、判断传入的参数个数
    				switch(arguments.length){
    					case 3:
    						setCookie(name, value, obj);
    						break;
    					case 2:
    						if(value == null){
    							//removeCookie
    							removeCookie(name);
    						}else{
    							setCookie(name, value);
    						}
    						break;
    					case 1: //获取cookie
    						return getCookie(name);
    						break;
    					default:
    						alert("error");
    						break;
    				}
    			}
    
    
    			$_cookie("变种人", "万磁王", {
    				expires: 7
    			})
    
    			$_cookie("七龙珠", "贝吉塔", {
    				expires: 30
    			})
    
    			$_cookie("火影忍者", "日向宁次", {
    				expires: 100
    			})
    
    
    			alert(decodeURIComponent(document.cookie));
    
    			// alert($_cookie("七龙珠"));
    			$_cookie("七龙珠", null);
    
    
    			alert(decodeURIComponent(document.cookie));
    

    登录Cookie

            <style>
    			#login{
    				 200px;
    				height: 100px;
    				background-color: orange;
    				border: 1px solid black;
    				margin: 100px auto;
    				text-align: center;
    				padding: 40px
    			}
    			#login input{
    				 200px;
    				height: 24px;
    				font-size: 16px;
    				margin-bottom: 10px
    
    			}
    			#btn1{
    				 100px;
    				height: 25px;
    				background-color: gray;
    				color: white;
    				font-size: 15px
    			}
    		</style>
    		<script src = "js/tool.js"></script>
    		<script>
    			/*
    				1、第一次登录,输入用户名和密码
    				2、登录成功
    			*/
    			window.onload = function(){
    				//加载页面完成,判断之前是否存储过username这个cookie
    				var usernameStr = $_cookie("username");
    				// alert(usernameStr);
    				if(usernameStr){
    					$("#login").innerHTML = "欢迎回来";
    				}
    
    
    
    				$("#btn1").onclick = function(){
    					//发送用户名和密码,进行登录操作
    					//将用户名和密码缓存
    					$_cookie("username", $("#username").value, {
    						expires: 7
    					})
    					$_cookie("password", $("#password").value, {
    						expires: 7
    					})
    
    					alert("第一次登录成功");
    				}
    			}
    		</script>
    	</head>
    	<body>
    		<div id = "login">
    			<input id = "username" type="text" placeholder="用户名" />
    			<input id = "password" type="password" placeholder="密码" />
    			<br/>
    			<button id = "btn1">登录</button>
    		</div>
    	</body>
    

    二、ECMA5

    1、严格模式

    严格模式:更严格的语法

    【注】想在哪个作用域下,使用严格模式,在哪个作用域下,写下面这句话。
    "use strict"

    【注】一般情况下不要写在全局作用域。

                function show(){
    				"use strict";
    				a = 10; //强制声明称全局变量
    			}
    
    			show();
    			alert(a);
    

    2、bind

    强制修改函数中this指向
    格式:函数.call(第一个参数传this的指向);

                function show(num1, num2){
    				alert(this);
    				alert(num1 + ',' + num2);
    			}
    			// show(); //object Window
    			// show.call("hello", 10, 20);
    

    apply
    格式:函数.apply()
    后续参数:直接放在一个数组中,当做第二个参数传入。

    		// show.apply("world", [10, 20]);
    

    【注】上述两个方法,是在函数调用的时候强制修改this指向。
    /*

    bind()
    【注】预设this的指向。
    返回值:还这个函数,这个函数的this,已经被预先设定。

    		*/
    		var show2 = show.bind("helloworld");
    
    		// show2(30, 40);
    		show.bind("helloworld")(30, 40);
    

    bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。

    3、数组方法

    ++重点++:indexOf filter forEach
    其他了解。

    indexOf
    格式:数组.indexOf(元素, start)
    从start开始,找元素第一次在数组中出现的位置。
    返回值:返回-1没有找到, 返回>=0,找到

                /*var arr = [10, 20, 30, 40, 50, 40];
    			alert(arr.indexOf(40, 4));*/
    

    forEach 遍历数组
    格式:
    数组.forEach(function(item, index, array){
       item 当前遍历到的元素
       index 当前遍历到的下标
       array 当前遍历的数组本身
    })

                // var arr = [10, 20, 30, 40, 50];
    			/*arr.forEach(function(item, index, array){
    				alert("item:" + item + ", index:" + index);
    			})*/
    
    			// arr.forEach(alert);
    			// arr.forEach(console.log);
    

    map 映射

                /*var arr = [10, 20, 30, 40, 50];
    			var newArr = arr.map(function(item, index, array){
    				return item + 5;
    			})
    			alert(arr);
    			alert(newArr);*/
    

    reduce 归并

                var arr = [10, 20, 30, 40, 50];
    			var tmp = arr.reduce(function(pre, next, index, array){
    				/*
    					pre  上一次遍历,return 后面表达式的值
    					next 当前遍历到的元素 从下标1开始遍历
    				*/
    				// alert(pre + ", " + next);
    				return pre + next;
    			})
    			// alert(tmp);
    

    filter 过滤
    return 后面写过滤条件

                var arr = [10, 20, 30, 40, 50];
    			var newArr = arr.filter(function(item, index, array){
    				return item > 30;
    			})
    			// alert(newArr);
    

    some
    判断,这个数组中,是否有符合return后面表达式条件的元素。
    返回:布尔值
    【注】如果找到符合条件的元素,直接终止。

                var arr = [10, 20, 30, 40, 50];
                var res = arr.some(function(item, index, array){
    				// alert(item + ", " + index);
    				return item > 30;
    			})
    			// alert(res)
    

    every
    判断,这个数组中,所有元素都必须符合return后面表达式的要求。
    返回值:布尔值
    【注】只要找不符合条件,就直接终止,返回结果false

                var arr = [10, 20, 30, 40, 50];
                var res = arr.every(function(item, index, array){
    				alert(item + ", " + index);
    				return item < 30;
    			})
    
    			alert(res);
    

    4、字符串

    trim
    格式:字符串.trim()
    功能:去除,首部尾部空格。

                var str = "    he  l  lo    ";
    			alert("|" + str + "|");
    			alert("|" + str.trim() + "|");
    

    三、ECMA6

    1、let关键字

    ECMA6
    var 用关键字 let代替

    通过var声明的变量,作用域以函数的大括号为界限的,

    通过let声明的变量,作用域以大括号为界限的,++包括if for swtich++

                /*if(true){
    				var num = 10;
    				alert(num);
    			}
    
    			alert(num);*/
    
    			/*if(true){
    				let num = 10;
    				alert(num);
    			}
    
    			alert(num);*/
    
    
    			/*for(var i = 0; i < 5; i++){
    				setTimeout(function(){
    					alert(i);
    				}, 2000);
    			}*/
    
    			/*for(let i = 0; i < 5; i++){
    				setTimeout(function(){
    					alert(i);
    				}, 2000);
    			}
    
    
    			alert("循环执行完了");*/
    
    
    			/*for(var i = 0; i < 5; i++){
    				for(var i = 0; i < 5; i++){
    					console.log(i);
    				}
    			}*/
    
    			for(let i = 0; i < 5; i++){
    				for(let i = 0; i < 5; i++){
    					console.log(i);
    				}
    			}
    

    2、const

    var let 声明变量
    const 声明不可修改的变量/常量

                var num = 100;
    			num = 20;
    			alert(num);*/
    
    			/*const IP = "10.30.155.73";
    
    			alert(IP);
    			IP = 10;
    			alert(IP);
    

    3、箭头函数

                function show(){
    				alert(123);
    			}
    			show();
    

    声明函数的方式进行简化 箭头函数

                /*function add(num1, num2){
    				return num1 + num2;
    			}*/
    
    			var add = (num1, num2) => num1 + num2;
    
    			alert(add(10, 20));
    
  • 相关阅读:
    制作Windows Server 2008安装启动U盘
    wireshark教程(一)
    TCPdump抓包命令详解
    ATM交换机 和普通交换机区别
    胖ap和瘦ap区别
    酒店网络非常常见故障一例
    JQuery EasyUI DataGrid动态合并(标题)单元) 一
    字典表左右选择
    treegrid-dnd.js
    MySQL开发规范
  • 原文地址:https://www.cnblogs.com/zhongchao666/p/9275529.html
Copyright © 2020-2023  润新知