在登錄界面添加記住密碼功能,我首先想到的是在java后臺中調用cookie存放賬號密碼,大致如下:
HttpServletRequest request HttpServletResponse responseCookie username = new Cookie("username ","cookievalue");Cookie password = new Cookie("password ","cookievalue");response.addCookie(username );response.addCookie(password );但是為安全起見,我們在后臺獲取的密碼大多是在js中通過MD5加密后的密文,如果將密文放到cookie中,在js中獲取到也沒有作用;
然后考慮在js中存取cookie,代碼如下:
//設置cookievar passKey = '4c05c54d952b11e691d76c0b843ea7f9';function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays*24*60*60*1000)); var expires = "expires="+d.toUTCString(); document.cookie = cname + "=" + encrypt(escape(cvalue), passKey) + "; " + expires;}//獲取cookiefunction getCookie(cname) { var name = cname + "="; var ca = document.cookie.split(';'); for(var i=0; i<ca.length; i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1); if (c.indexOf(name) != -1){ var cnameValue = unescape(c.substring(name.length, c.length)); return decrypt(cnameValue, passKey); } } return "";}//清除cookie function clearCookie(cname) { setCookie(cname, "", -1); }setCookie(cname, cvalue, exdays)三個參數分別是存放的cookie名字、cookie值、cookie有效天數
由于cookie中不能包含等號、空格、分號等特殊字符,我在設置cookie時使用escape() 函數對字符串進行編碼,獲取cookie時使用unescape()函數解碼。但是escape()函數不會對 ASCII 字母和數字進行編碼,所以存放到cookie中的賬號、密碼是以明文存放的,不安全。于是上網找了一個對字符串加密解密算法,該算法需要傳兩個參數,一個需要加密的字符串,一個自定義加密密鑰passKey。設置cookie時使用encrypt(value, passkey)加密,讀取cookie時使用decrypt(value, passKey)解密,該算法附在本文最后。
存取cookie方法的調用:
1、定義checkbox
<input type="checkbox" id="rememberMe" checked="checked"/>記住密碼
2、判斷帳號密碼輸入無誤后調用
if($('#rememberMe').is(':checked')){ setCookie('customername', $('#username').val().trim(), 7) setCookie('customerpass', $('#password').val().trim(), 7) }3、進入登錄界面后,判斷cookie中是否有帳號密碼,如果有就自動填充
$(function(){ //獲取cookie var cusername = getCookie('customername'); var cpassword = getCookie('customerpass'); if(cusername != "" && cpassword != ""){ $("#username").val(cusername); $("#password").val(cpassword); }}最后附上字符串加密解密算法
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答