js中利用cookie实现记住密码功能

js中利用cookie实现记住密码功能

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

1 HttpServletRequest request
2 HttpServletResponse response
3 Cookie username = new Cookie("username ","cookievalue");
4 Cookie password = new Cookie("password ","cookievalue");
5 response.addCookie(username );
6 response.addCookie(password );

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

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

 1 //设置cookie
 2 var passKey = ‘4c05c54d952b11e691d76c0b843ea7f9‘;
 3 function setCookie(cname, cvalue, exdays) {
 4     var d = new Date();
 5     d.setTime(d.getTime() + (exdays*24*60*60*1000));
 6     var expires = "expires="+d.toUTCString();
 7     document.cookie = cname + "=" + encrypt(escape(cvalue), passKey) + "; " + expires;
 8 }
 9 //获取cookie
10 function getCookie(cname) {
11     var name = cname + "=";
12     var ca = document.cookie.split(‘;‘);
13     for(var i=0; i<ca.length; i++) {
14         var c = ca[i];
15         while (c.charAt(0)==‘ ‘) c = c.substring(1);
16         if (c.indexOf(name) != -1){
17           var cnameValue = unescape(c.substring(name.length, c.length));
18           return decrypt(cnameValue, passKey);
19         }
20     }
21     return "";
22 }
23 //清除cookie
24 function clearCookie(cname) {
25     setCookie(cname, "", -1);
26 }

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、判断帐号密码输入无误后调用

1 if($(‘#rememberMe‘).is(‘:checked‘)){
2             setCookie(‘customername‘, $(‘#username‘).val().trim(), 7)
3             setCookie(‘customerpass‘, $(‘#password‘).val().trim(), 7)
4           }

3、进入登录界面后,判断cookie中是否有帐号密码,如果有就自动填充

$(function(){

  //获取cookie
  var cusername = getCookie(‘customername‘);
  var cpassword = getCookie(‘customerpass‘);
  if(cusername != "" && cpassword != ""){
    $("#username").val(cusername);
    $("#password").val(cpassword);
  }
}

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

1 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,{}))

-此文章为转载-转载至http://www.cnblogs.com/lujiulong/p/5985031.html

时间: 2024-08-01 10:32:46

js中利用cookie实现记住密码功能的相关文章

jquery.cookie.js 操作cookie实现记住密码功能的实现代码

jquery.cookie.js操作cookie实现记住密码功能,很简单很强大,喜欢的朋友可以参考下. 复制代码代码如下: //初始化页面时验证是否记住了密码 $(document).ready(function() { if ($.cookie("rmbUser") == "true") { $("#rmbUser").attr("checked", true); $("#user").val($.coo

记住密码功能 JS结合JQuery 操作 Cookie 实现记住密码和用户名!

// 记住密码功能 JS结合JQuery 操作 Cookie 实现记住密码和用户名! var username = document.getElementById("username"); var password = document.getElementById("password"); var date=new Date(); var expiresDays=1000; //过期时间. date.setTime(date.getTime()+expiresDa

Android &#39;记住密码&#39;功能

1.运行后界面图 2.主要代码: 2.1 activity_main.xml(2个TextView 2个EditText 1个CheckBox以及1个Button): 1 <TextView 2 android:id="@+id/tvAccount" 3 android:layout_width="wrap_content" 4 android:layout_height="wrap_content" 5 android:layout_al

ASP.NET中利用DataGrid的自定义分页功能

ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页 ASP.Net中的DataGrid有内置分页功能, 但是它的默认的分页方式效率是很低的,特别是在数据量很大的时候,用它内置的分页功能几乎是不可能的事,因为它会把所有的数据从数据库读出来再进行分页, 这种只选取了一小部分而丢掉大部分的方法是不可去取的. 在最进的一个项目中因为一个管理页面要管理的数据量非常大,所以必须分页显示,并且不能用DataGrid的内置分页功能,于是自己实现分页. 下面介绍一下我在项目中用到的分页

android: SharedPreferences实现记住密码功能

既然是实现记住密码的功能,那么我们就不需要从头去写了,因为在上一章中的最佳实 践部分已经编写过一个登录界面了,有可以重用的代码为什么不用呢?那就首先打开 BroadcastBestPractice 项目,来编辑一下登录界面的布局.修改 login.xml 中的代码,如下 所示: <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="mat

为了用户信息安全,屏蔽浏览器的记住密码功能

现在绝大多数浏览器,都有一个很方便的记住密码功能,不过在公共场所,这样对用户的信息很不安全.  所以为了屏蔽浏览器的记住密码,各路高手百家争鸣,提出很多好办法. 要是浏览器给开发者,提供一个清空浏览器缓存信息的api就好了. 现在直接上方法,语法有什么不通畅的地方请见谅--囧 1.给表单输入控件加上autocomplete='off' 在某些浏览器中(比如chrome),并不能阻止记住密码功能:在IE中有效. 2.在密码框的前面加一个<input type='hidden'> 经过试验,<

js中的cookie及封装

概念参考高级编程: 1.什么是cookie cookie是用于客户端储存会话的信息: 格式key=value: 2.cookie的构成 名称:一个唯一去顶的cookie的名称,不区分大小写,cookie的名称必须是经过URL编码的: 值:存储cookie中的字符串,值必须被URL编码 域:cookie对于哪个域是有效的,所有向该域发送的请求中都会包含这个cookie信息,这个值可以包含子域,也可以不包含这个cookie信息,如果没有明确设定,那么这个域会被认作来自设置cookie的那个域 路径:

ssh 解决经常断开与记住密码功能

一.解决ssh经常自动断开问题 修改 /etc/ssh/ssh_config 其中对应项为 ClientAliveInterval 30 ClientAliveCountMax 3 表示每30秒发一次心跳测试请求,如果失败3次则断开连接(数值可酌情修改) 二.ssh记住密码功能 1. 生成一个新的sshkey(如果没有的话,已存在则可直接执行第二步) 可以使用如下命令 ssh-keygen -t rsa -b 4096 -C "[email protected]" 或简单的直接输入 s

阻止浏览器记住密码功能

一.关于浏览器记住密码功能 可以参考:http://www.cnblogs.com/tianma3798/p/6062869.html 二.如何控制浏览器不提示"是否记住密码"呢 解决方案1: 1.关闭表单的自动完成功能 autocomplete=false,关于参考:autocomplete属性 2.延迟设置密码域,即在页面加载成功后 将输入框的type='password' 代码示例: <div class="container"> <form