JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍


Posted in Javascript onNovember 10, 2016

cookie是网站设计者放置在客户端(浏览器)的小文本文件,cookie不仅能够实现保存密码功能,还可以通过cookie保存最近浏览记录增加用户体验。

在登录界面添加记住密码功能,我首先想到的是在java后台中调用cookie存放账号密码,大致如下:

HttpServletRequest request 
HttpServletResponse response
Cookie username = new Cookie("username ","cookievalue");
Cookie password = new Cookie("password ","cookievalue");
response.addCookie(username );
response.addCookie(password );

但是为安全起见,我们在后台获取的密码大多是在js中通过MD5加密后的密文,如果将密文放到cookie中,在js中获取到也没有作用;

然后考虑在js中存取cookie,代码如下:

//设置cookie
var 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;
}
//获取cookie
function 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);
}
}

最后附上字符串加密解密算法

eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('A G(a,b){x(b==v||b.7<=0){D.y("z R P O");t v}6 c="";s(6 i=0;i<b.7;i++){c+=b.u(i).n()}6 d=m.r(c.7/5);6 e=l(c.9(d)+c.9(d*2)+c.9(d*3)+c.9(d*4)+c.9(d*5));6 f=m.M(b.7/2);6 g=m.B(2,C)-1;x(e<2){D.y("L K J z");t v}6 h=m.F(m.H()*N)%I;c+=h;w(c.7>q){c=(l(c.o(0,q))+l(c.o(q,c.7))).n()}c=(e*c+f)%g;6 j="";6 k="";s(6 i=0;i<a.7;i++){j=l(a.u(i)^m.r((c/g)*E));x(j<p){k+="0"+j.n(p)}Q k+=j.n(p);c=(e*c+f)%g}h=h.n(p);w(h.7<8)h="0"+h;k+=h;t k}A S(a,b){6 c="";s(6 i=0;i<b.7;i++){c+=b.u(i).n()}6 d=m.r(c.7/5);6 e=l(c.9(d)+c.9(d*2)+c.9(d*3)+c.9(d*4)+c.9(d*5));6 f=m.F(b.7/2);6 g=m.B(2,C)-1;6 h=l(a.o(a.7-8,a.7),p);a=a.o(0,a.7-8);c+=h;w(c.7>q){c=(l(c.o(0,q))+l(c.o(q,c.7))).n()}c=(e*c+f)%g;6 j="";6 k="";s(6 i=0;i<a.7;i+=2){j=l(l(a.o(i,i+2),p)^m.r((c/g)*E));k+=T.U(j);c=(e*c+f)%g}t k}',57,57,'||||||var|length||charAt||||||||||||parseInt|Math|toString|substring|16|10|floor|for|return|charCodeAt|null|while|if|log|key|function|pow|31|console|255|round|encrypt|random|100000000|the|change|plesae|ceil|1000000000|empty|be|else|cannot|decrypt|String|fromCharCode'.split('|'),0,{}))

PS:下面看下js操作cookie的相关函数

//设置cookie函数,三个参数,一个是cookie的名子,一个是值,一个是设置cookie保存时间,单位:天
function SetCookie(name,value,days){
 var days=arguments[2]?arguments[2]:30; //此 cookie 将被保存 30 天
 var exp=new Date(); //new Date("December 31, 9998");
 exp.setTime(exp.getTime() + days*86400000);
 document.cookie=name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
//取cookies函数
function getCookie(name){
 var arr=document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
 if(arr!=null){
 return unescape(arr[2]);
 }
 return null;
}
//删除cookie函数
function delCookie(name){
 var exp = new Date();
 exp.setTime(exp.getTime() - 1);
 var cval=getCookie(name);
 if(cval!=null){
 document.cookie= name + "="+cval+";expires="+exp.toGMTString();
 }
}

以上所述是小编给大家介绍的JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js字符编码函数区别分析
Jun 05 Javascript
jQuery $.data()方法使用注意细节
Dec 31 Javascript
jQuery层级选择器用法分析
Feb 10 Javascript
Bootstrap3制作自己的导航栏
May 12 Javascript
AngularJs页面筛选标签小功能
Aug 01 Javascript
深入理解JavaScript 参数按值传递
May 24 Javascript
基于Vue实例生命周期(全面解析)
Aug 16 Javascript
Vue 实现html中根据类型显示内容
Oct 28 Javascript
JS代码检查工具ESLint介绍与使用方法
Feb 04 Javascript
Postman动态获取返回值过程详解
Jun 30 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
Sep 05 Javascript
jquery简易手风琴插件的封装
Oct 13 jQuery
easyui中combotree循环获取父节点至根节点并输出路径实现方法
Nov 10 #Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
Nov 09 #Javascript
通过bootstrap全面学习less
Nov 09 #Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
Nov 09 #Javascript
jquery插件bootstrapValidator数据验证详解
Nov 09 #Javascript
jQuery之动画效果大全
Nov 09 #Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
Nov 09 #Javascript
You might like
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
第十二节--类的自动加载
2006/11/16 PHP
PHP 的 __FILE__ 常量
2007/01/15 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
2011/08/06 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
PHP间隔一段时间执行代码的方法
2014/12/02 PHP
PHP去除字符串最后一个字符的三种方法实例
2017/03/01 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
超酷的网页音乐播放器DewPlayer使用方法
2010/12/18 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
jQuery中的ready函数与window.onload谁先执行
2016/06/21 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
Node.js创建Web、TCP服务器
2017/12/05 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
详解Python中的from..import绝对导入语句
2016/06/21 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
如何用Python徒手写线性回归
2021/01/25 Python
CSS3属性使网站设计增强同时不消弱可用性
2009/08/29 HTML / CSS
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
医科学校毕业生自荐信
2013/11/09 职场文书
卫校毕业生个人自我鉴定
2014/04/28 职场文书
跳蚤市场口号
2014/06/13 职场文书
会计专业求职信
2014/08/10 职场文书
借款协议书
2014/09/16 职场文书
父亲节活动总结
2015/02/12 职场文书
工作自我推荐信范文
2015/03/25 职场文书
4S店收银员岗位职责
2015/04/07 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python
java Nio使用NioSocket客户端与服务端交互实现方式
2021/06/15 Java/Android