1. 程式人生 > >使用Cookie存取使用者登入資訊

使用Cookie存取使用者登入資訊

通常我們在開發一個登陸應用的時候,有一個非常常見的業務需求,那就是保留使用者登陸資訊多少天!!

不廢話,直接上demo!!

<!--
* @Author: [ZGM] IME33 
* @Date:   2017-10-09 13:34:23
* @Last Modified by:   [ZGM] <[email protected]>
* @Last Modified time: 2017-10-09 13:44:23
-->
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>cookie demo測試</title>
	<style type="text/css">
		*{padding: 0;margin: 0;font-family: "微軟雅黑";}
		h3{margin: 20px auto;text-align: center;}
		.formbox{width: 600px;height:400px;border: 2px solid green;border-radius: 3px;margin: 20px auto;}
		ul,li{list-style: none;text-align: center;}
		li input{width: 500px;margin:20px  50px 20px 50px;height: 32px;border:1px solid #e2e2e2;padding: 0 0 0 12px;}
		.subbtn{appearance:none;color:#fff;width: 200px;height: 30px;background: #da2330;border-radius: 4px;margin: 0 auto;border:none;}
		#rmbPassword{
			width: 20px;
		    height: 20px;
		    display: inline-block;
		    background: url(images/checkimg.png) no-repeat;
		    background-position: 0px 0;
		    background-size: 200% 100%;
		    vertical-align: bottom;
		}
		#rmbPassword.active{
			background-position: -20px 0;
			background-size: 200% 100%;
		}
	</style>
</head>
<body>
	<h3>cookie demo測試</h3>
	<div class="formbox">
		<ul>
			<li class="input">
			    <input id="userName" name="username" tabindex="1" placeholder="使用者名稱/手機號" type="text" value="" size="25">
			</li>
			<li class="input">
				<input id="password" name="password" tabindex="2" placeholder="密碼" type="password" value="" size="25" autocomplete="off">
			</li>
			<li class="auto-login fl" onclick="check()">
				<b id="rmbPassword" class="active"></b>
           	    <a href="javascript:void(0)" style="color:#666666;">記住我</a>
			</li>
			<li>
				<button class="subbtn"  onclick="login()">觸發</button>
			</li>
		</ul>
	</div>
	<script type="text/javascript" src="jquery-1.10.2.min.js"></script>
	<script type="text/javascript">
		$(document).ready(function(){
			getRememberInfo();
		});

		function login(){
			var userName = $("#userName").val();
			if(userName && userName!=""){
				userName = userName.toLowerCase();
				$("#userName").val(userName);
				setCookie("checkSettlein","true",168,"/");
				if($("#rmbPassword").hasClass("active")){
					setCookie("rmbPassword","active",168,"/passport");
					setCookie("userName",userName,168,"/passport");
					setCookie("password",$("#password").val(),168,"/passport");
				}else{
					deleteCookie("userName","/passport");
					deleteCookie("password","/passport");
					setCookie("rmbPassword","unactive",168,"/passport");
				}
			}
			return true;
		}


//獲取cookie資訊
function getRememberInfo() {
	try {
		var rmbPassword = getCookieValue("rmbPassword");
		var userName = $("#userName").val();
		var userPassword = $("#password").val();
		if(rmbPassword && rmbPassword=="active"){
			$("#rmbPassword").addClass("active");
			userName = getCookieValue("userName");
			userPassword = getCookieValue("password");
			$("#userName").val(userName);
			$("#password").val(userPassword);
		}else if(rmbPassword == "unactive"){
			$("#rmbPassword").removeClass("active");
		}
	} catch (err) {
		console.log("NO RMB PASSWORD!");
	}
}

//新建cookie。
//hours為空字串時,cookie的生存期至瀏覽器會話結束。hours為數字0時,建立的是一個失效的cookie,這個cookie會覆蓋已經建立過的同名、同path的cookie(如果這個cookie存在)。
function setCookie(name, value, hours, path) {
	var name = EnEight(escape(name));
	var value = EnEight(escape(value));
	var expires = new Date();
	expires.setTime(expires.getTime() + hours * 3600000);//setTime() 方法以毫秒設定 Date 物件
	path = path == "" ? "" : ";path=" + path;
	_expires = (typeof hours) == "string" ? "" : ";expires="+ expires.toUTCString();
	document.cookie = name + "=" + value + _expires + path;
}
//獲取cookie值
function getCookieValue(name) {
	var name = EnEight(escape(name));
	var allcookies = document.cookie;
	name += "=";
	var pos = allcookies.indexOf(name);
	if (pos != -1) {
		var start = pos + name.length;
		var end = allcookies.indexOf(";", start);
		if (end == -1)
			end = allcookies.length;
		var value = allcookies.substring(start, end);
		return DeEight(unescape(value)); //對它解碼
	} else
		return ""; //搜尋失敗,返回空字串
	}
//刪除cookie 生命週期設定0
function deleteCookie(name, path) {
	var name = EnEight(escape(name));
	var expires = new Date(0);
	path = path == "" ? "" : ";path=" + path;
	document.cookie = name + "=" + ";expires=" + expires.toUTCString() + path;//toUTCString根據世界時 (UTC) 把 Date 物件轉換為字串
}

/*8進位制加密*/
function EnEight(value){
	var monyer = new Array();
	for(var i=0;i<value.length;i++){
		monyer+="\\"+value.charCodeAt(i).toString(8); 
	}
	return monyer;
}
/*8進位制解密*/
function DeEight(value){
	var monyer = new Array();
	var s=value.split("\\");
	for(var i=1;i<s.length;i++){
		monyer+=String.fromCharCode(parseInt(s[i],8));
	}
	return monyer;
}
</script>
</body>
</html>


主要業務邏輯:使用者進入介面 → 讀取document的cookie資料 → 解密匹配到資料填入輸入框 → 使用者登陸  /  使用者觸發 → 獲取使用者鍵入資訊 → 加密 / 轉碼→  setcookie存入name值 生命週期 等資訊 → 完成!


結果:


羅列幾個方法:

1、setTime() 方法以毫秒設定 Date 物件。eg:dateObject.setTime(millisec);toUTCString() 方法可根據世界時 (UTC) 把 Date 物件轉換為字串,並返回結果。

2、charCodeAt() 方法可返回指定位置的字元的 Unicode 編碼。這個返回值是 0 - 65535 之間的整數。方法 charCodeAt() 與 charAt() 方法執行的操作相似,只不過前者返回的是位於指定位置的字元的編碼,而後者返回的是字元子串。

eg:stringObject.charCodeAt(index)

3、fromCharCode() 可接受一個指定的 Unicode 值,然後返回一個字串。

4、escape() 函式可對字串進行編碼,這樣就可以在所有的計算機上讀取該字串。

5、unescape() 函式可對通過 escape() 編碼的字串進行解碼。

歡迎指正交流!!