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 相关文章推荐
Javascript中的Split使用方法与技巧
Mar 09 Javascript
Javascript Global对象
Aug 13 Javascript
纯CSS打造的导航菜单(附jquery版)
Aug 07 Javascript
JS实现统计复选框选中个数并提示确定与取消的方法
Jul 01 Javascript
jQuery Validate表单验证入门学习
Dec 18 Javascript
Angular 应用技巧总结
Sep 14 Javascript
微信小程序 实战小程序实例
Oct 08 Javascript
Javascript之面向对象--方法
Dec 02 Javascript
整理关于Bootstrap列表组的慕课笔记
Mar 29 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
Sep 06 jQuery
解析vue data不可以使用箭头函数问题
Jul 03 Javascript
vue 取出v-for循环中的index值实例
Nov 09 Javascript
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
php文档更新介绍
2011/07/22 PHP
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
web前端开发也需要日志
2010/12/09 Javascript
jQuery的animate函数学习记录
2014/08/08 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
js检查是否关闭浏览器的方法
2016/08/02 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
实例讲解Vue.js中router传参
2018/04/22 Javascript
详解Angular6学习笔记之主从组件
2018/09/05 Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
2018/11/13 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
python使用筛选法计算小于给定数字的所有素数
2018/03/19 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
python中while和for的区别总结
2019/06/28 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
python 命名规范知识点汇总
2020/02/14 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
英国工具中心:UK Tool Centre
2017/07/10 全球购物
说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法
2012/05/24 面试题
仓库门卫岗位职责
2013/12/22 职场文书
健康教育评估方案
2014/05/25 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
自荐信大全
2019/03/21 职场文书
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android