最近做了个登录界面,要实现记住密码效果,然而看似很简单,做起来略复杂。我就在不断改进中,有如下成果,如果可以优化,或有什么问题,可以评论留言。
首先,需下载jquery.cookie.js,和md5.js。
介绍一下这两个js文件,jquery.cookie.js 是提供了一些创建cookie的API接口的js文件,也可以自己写,md5.js是用来对密码进行MD5方式的加密。
再介绍下cookie.js的一般方法:
cookie保存在客户端,保存方式类似于text,且以键值对的形式保存,即key->value。
创建cookie
$.cookie(键名,值,保存时长) //保存时长的写法为{expires:number,path:'/'},expires是要保存的天数,path是保存的路径,一般为'/'。
删除cookie,只用将天数设为-1即可。
取cookie的值
$.cookie(键名) //返回字符串类型的键名所对应的值。
本次所用的md5.js 只有32位加密,而我修改了md5.js 的功能,使他能进行16位加密,所以方法改为$.md5(xxx,16),如果没有对js文件进行修改,其方法为$.md5(xxx);
在上代码前,须有几点强调,首先,加有cookie功能的代码需在本地服务器上实现,干瘪瘪的html是无法实现cookie的功能。
其次,必须下对正确的jquery.cookie.js。
再次,如果想实时查看cookie的内容,建议用Firefox浏览器,因为有较简单查询cookie的方法
最后,md5.js 只是更好地与数据库交互,在前端就对密码加密,你可以使用数据库的加密方法实现。
特别说明的是,记住密码功能不一定由cookie实现,可以使用html5的localstorage来实现。
<script type="text/javascript" src="scripts/jquery-1.8.1.min.js"></script>
<script type="text/javascript" src="scripts/jquery.cookie.js"></script>
<script type="text/javascript" src="scripts/md5.js"></script>
<body>
<label for="Username">用户名:</label>
<input type="text" id="Username" />
<span id="error1" style="color:red;font-size:large;"></span>
<label for="PSD">密码:</label>
<input type="password" id="PSD" />
<span id="error2" style="color:red;font-size:large;"></span>
<input type="checkbox" id="Remember" /><label for="Remember">记住密码</label>
<input type="button" value="登录" onclick="login()" />
<input type="reset" onclick="IsReset()" />
</body>
<script type="text/javascript">
$(document).ready(function() {
//将获取的值填充入输入框中
var lastUser = $.cookie('Last'); //获取cookie中其键名为Last对应的值
var Isre = document.getElementById("Remember");
var userId = $('#Username');
var code = $('#PSD');
if (lastUser != undefined) { //如果对应的键有值,则填充到登录框中,作出响应
userId.val($.cookie("UN" + lastUser));
code.val("****"); //应把键名取得特别点,防止跟其他的cookie冲突,要保证名字的唯一性
Isre.checked = true;
} else {
userId.val(""); //否则输入框内容为空
}
});
function IsReset() { //重置函数,so easy 不做说明
$('#Username').val("");
$('#PSD').val("");
document.getElementById("Remember").checked = false;
}
function immediately() { //立即操作,如果不想登录记住的用户,意图对用户名修改,则会调用此函数
var element = document.getElementById("Username");
if ("\v" == "v") { //验证所用的浏览器是否为IE,如果是则用IE特有的方法添加监听事件
element.onpropertychange = webChange;
} else {
element.addEventListener("input", webChange, false); //一般浏览器添加监听事件的方法,将方法webChange与id="Username"的输入框绑定
} //当状态改变时,则调用webChange90()
function webChange() {
var user = $("#Username").val();
var mdcode = $.cookie("PSD" + user);
var code = $("#PSD");
var Isrem = document.getElementById("Remember");
if (mdcode != undefined&&mdcode!="") { //因为密码经md5加密,不能全部显示到登录框中,所以cookie中记住的密码显示在框中的是****
code.val("****"); //而不是真正的密码和加密后的密码
Isrem.checked = true;
} else { //如果cookie中没有相应的信息,未匹配成功,则密码输入框为空
code.val("");
Isrem.checked = false;
}
}
}
immediately();
function login() {
//异常判断...
var json = "";
var username = $("#Username").val();
var psd = $("#PSD").val();
if (username == "") {
$("#error1").text("*");
} else { $("#error1").text(""); }
if (psd == "") {
$("#error2").text("*");
} else { $("#error2").text(""); } //以上函数是对输入框是否有值,进行判断,如果没有,则显示星星,以提示你未填登录信息
if (!(username == "" || psd == "")) { //如果填完了信息,则进行如下判断
var Isre = document.getElementById("Remember");
if (Isre.checked && $.cookie("IR" + username)) { //IR+username键名对应保存的信息是真假,用来标记username是否被记住过,即在cookie中是否有存储
var mycode = $.cookie("PSD" + username);
var renewcode=$.md5(psd,16);
$.cookie("IR" + username, 'true', { expires: 7, path: '/' });
$.cookie("UN" + username, username, { expires: 7, path: '/' });
//取密码框中的数据,如果是****则说明cookie中有值,不相同的就存储新的。
if (psd == "****")
{
$.cookie("PSD" + username, mycode, { expires: 7, path: '/' });
json = '{"USERNAME": "' + username + '", "PSD": "' +mycode+'" }';
}
else
{
$.cookie("PSD" + username, renewcode, { expires: 7, path: '/' });
json = '{"USERNAME": "' + username + '", "PSD": "' +renewcode +'" }';
}
$.cookie("LAST", username, { expires: 7, path: '/' });
} else
if (Isre.checked == true&& $.cookie("IR" + username)==undefined) {//如果记住密码的checked为真,且是新用户则继续存储用户名和密码,
//大家可以细细体会为什么要与上面分开写
$.cookie("LAST", username, { expires: 7, path: '/' }); //LAST记住的是最近登入的用户名
$.cookie("IR" + username, 'true', { expires: 7, path: '/' }); //IR记住的是username是否在cookie中
$.cookie("UN" + username, username, { expires: 7, path: '/' });//UN记住的是用户名
$.cookie("PSD" + username, $.md5(psd,16), { expires: 7, path: '/' });//PSD记住的是加密后的密码
} else
if(Isre.checked==false&&$.cookie("IR" + username)) //将原有最近的记住的密码取消记住
{
json = '{"USERNAME": "' + username + '", "PSD": "' +$.cookie("PSD"+username) +'" }';
if (username == $.cookie('LAST')) //如果LAST对应的值被登录即最近登录的账号且未点击checkbox,则将cookie中对应user的信息删除
$.cookie('LAST', '', { expire: -1, path: '/' }); //我没有想到更好的办法解决找最近登录的上一个登录的账号
$.cookie("IR" + username, '', { expires: -1, path: '/' });
$.cookie("UN" + username, '', { expires: -1, path: '/' });
$.cookie("PSD" + username, '', { expires: -1, path: '/' });
}else //新密码且不记住
{ json = '{"USERNAME": "' + username + '", "PSD": "' +$.md5(psd)+'" }'; }
//与数据库连接验证代码,不给出
}
}
</script>