使用Jquery搭建最佳用戶體驗的登錄頁面之記住密碼自動登錄功能(含后臺代碼)
更新時間:2011年07月10日 00:40:56 作者:
今天將登錄功能徹底完成,加入記住密碼自動登錄功能,密碼在客戶端進(jìn)行第一次加密存儲。并修改了一些bug,優(yōu)化js代碼,上一版本太亂了。
需要引入插件jquery.md5.js
可直接在IIS下運(yùn)行;
用戶名:Ethan.zhu
密 碼:123456789
完整文件下載:WebApplication1_jb51.rar
首先將按鈕單擊事件的異步驗證提取出來作為一個單獨(dú)的函數(shù),需要將按鈕單擊事件里面的變量提取出來定義為全局變量,并且增加一個變量editPass(用來標(biāo)記是自己輸入密碼,還是從cookies中讀取的密碼)
var wrongTypeName, //用戶名的錯誤類型,可以直接作為錯誤提示信息數(shù)組的下標(biāo)
wrongTypePwd, //用戶密碼的錯誤類型
wrongNameHtml = new Array("", "請輸入用戶名", "用戶名長度太短", "用戶名長度超過12位", "您的用戶名或密碼錯誤", "超時,請重新登陸"),
wrongPwdHtml = new Array("", "請輸入密碼", "密碼長度小于6位", "", "密碼中含有非法字符"),
editPass=false;
這里從上一篇的按鈕單擊事件開始:
$(".btn-submit").click(function () {
wrongTypeName = 0;
wrongTypePwd = 0;
var uname = $("#uname").val(), //用戶名
pwd = $("#passwd").val(), //用戶密碼
plength = pwd.length,
nlength = uname.length; //長度
if (nlength == 0)
wrongTypeName = 1;
if (nlength > 0 && nlength < 2)
wrongTypeName = 2;
if (nlength > 20)
wrongTypeName = 3;
if (plength == 0)
wrongTypePwd = 1; //這里是對用戶名和密碼長度的一個判斷,并獲取錯誤信息數(shù)組的下標(biāo)。
else {
var patrn = /^(\w){6,20}$/;
if (plength < 6)
wrongTypePwd = 2;
if (plength > 50)
wrongTypePwd = 3;
if (plength > 6 && plength < 20) {
if (!patrn.exec(pwd))
wrongTypePwd = 4; //這里是對用戶密碼合法性的前端判斷,并返回錯誤數(shù)組的下標(biāo)
}
}
inputTip(0, wrongNameHtml, wrongTypeName);
inputTip(1, wrongPwdHtml, wrongTypePwd);
if (wrongTypePwd == 0 && wrongTypeName == 0) {//在用戶輸入信息完全合法的情況下,即數(shù)組下標(biāo)全部為0 開始執(zhí)行ajax驗證
//alert($.cookie("logout"));
if(editPass){
pwd = $.md5(pwd);
}
$("#passwd").val(pwd);
$("#login-form input").attr('disabled', true);
$('.remember').unbind('click');
//已經(jīng)向服務(wù)器提交了信息,所以將頁面上的所有輸入框按鈕設(shè)置成不可用狀態(tài),這樣可以有效的避免重復(fù)提交
var remb = $('#remember-long').val();
ajaxCheck(uname, pwd, remb);
}
});
變化在33行和41行,
行用來判斷密碼是用戶在程序內(nèi)部退出到登錄頁面的時候是自行輸入還是從cookies中讀取的。防止二次加密造成服務(wù)器驗證失敗。
行主要是將ajax處理過程提取出來,同時加入了服務(wù)器驗證成功之后的記住密碼和取消記住密碼的操作,方便閱讀:
var ajaxCheck = function (uname, pwd, remb) {
$(".btn-master").addClass("visibility");
var $params = "user_name=" + decodeURI(uname) + "&user_pwd=" + decodeURI(pwd) + "&remember=" + decodeURI(remb);
$.ajax({
type: 'POST',
url: 'CheckUserLogin.aspx',
//async: false,
cache: false,
dataType: 'json'
data: $params,
success: function (data, status) {
wrongTypeName = data.wrongTypeName;
wrongTypePwd = data.wrongTypePwd;
var loginSuccess = data.loginSuccess; //獲取服務(wù)器返回的json數(shù)據(jù)
if (loginSuccess == 0) {
if ($('#remember-long').val() == 1) {//記住密碼
$.cookie('UserName', uname, { expires: 7, path: '/' });
$.cookie('Password', pwd, { expires: 7, path: '/' });
}
else if ($('#remember-long').val() == 0) {//取消記住的密碼,或者沒有記住密碼
$.cookie('UserName', null,{ expires: 7, path: '/' });
$.cookie('Password', null,{ expires: 7, path: '/' });
}
location.href = "/Members/Members.html"
}
else {
$(".btn-master").removeClass("visibility");
$("#login-form input").attr('disabled', false);
inputTip(0, wrongNameHtml, wrongTypeName);
inputTip(1, wrongPwdHtml, wrongTypePwd);
}
},
error: function () {
wrongTypeName = 5;
inputTip(0, wrongNameHtml, wrongTypeName);
$("#login-form input").attr('disabled', false);
$('.remember').bind('click', function () { checkClick(); });
$(".btn-master").removeClass("visibility");
}
})
}
頁面初始化的時候要對記住密碼這個過程進(jìn)行處理:
var rememberPassword = function (logout) {//頁面加載完成之后執(zhí)行自動登錄檢查
var ckname = $.cookie('UserName');
var ckpwd = $.cookie("Password");
if (ckname != "" && ckpwd != "" && ckname != null && ckpwd != null) {
$('#remember-long').val("1")
$('#remember-long').attr('checked', true);
$("#uname").val(ckname); //用戶名
$('.reg-item').addClass('focus');
if (logout=="safe"){
$.cookie("logout","",{ expires: 1, path: '/' })
}
else{
$("#passwd").val(ckpwd); //用戶密碼
$(".btn-submit").trigger('click'); //自動登錄
}
}
else {
$('#remember-long').val("0")
$('#remember-long').attr('checked', false);
}
}
var logout = $.cookie("logout");
//判斷用戶是否是從內(nèi)部退出還是直接打開
//如果是從內(nèi)部退出,那么就不能再次自動登錄進(jìn)去,除非用戶刷新了頁面
rememberPassword(logout);
下面是完整的全新的前端腳本:
$(function () {
var wrongTypeName, //用戶名的錯誤類型,可以直接作為錯誤提示信息數(shù)組的下標(biāo)
wrongTypePwd, //用戶密碼的錯誤類型
wrongNameHtml = new Array("", "請輸入用戶名", "用戶名長度太短", "用戶名長度超過12位", "您的用戶名或密碼錯誤", "超時,請重新登陸"),
wrongPwdHtml = new Array("", "請輸入密碼", "密碼長度小于6位", "", "密碼中含有非法字符"),
editPass=false;
$('body').focus(); //讓輸入框不再自動獲取焦點(diǎn)
$('.reg-action .reg-input').each(function () {
var items = $(this).parent('.reg-item');
if ($(this).val()) {
items.addClass("focus");
}
$(this).bind('focus blur', function (event) {
var type = event.type; //獲取事件類型
if($(this).attr("id")=="passwd"){
editPass = true;
}
if (type == 'focus') {
if (items.hasClass('error')) {
$(this).val("");
items.removeClass('error');
}
items.addClass('focus');
} else if (!$(this).val()) {
items.removeClass('focus');
}
})
});
$(".btn-submit").click(function () {
wrongTypeName = 0;
wrongTypePwd = 0;
var uname = $("#uname").val(), //用戶名
pwd = $("#passwd").val(), //用戶密碼
plength = pwd.length,
nlength = uname.length; //長度
if (nlength == 0)
wrongTypeName = 1;
if (nlength > 0 && nlength < 2)
wrongTypeName = 2;
if (nlength > 20)
wrongTypeName = 3;
if (plength == 0)
wrongTypePwd = 1; //這里是對用戶名和密碼長度的一個判斷,并獲取錯誤信息數(shù)組的下標(biāo)。
else {
var patrn = /^(\w){6,20}$/;
if (plength < 6)
wrongTypePwd = 2;
if (plength > 50)
wrongTypePwd = 3;
if (plength > 6 && plength < 20) {
if (!patrn.exec(pwd))
wrongTypePwd = 4; //這里是對用戶密碼合法性的前端判斷,并返回錯誤數(shù)組的下標(biāo)
}
}
inputTip(0, wrongNameHtml, wrongTypeName);
inputTip(1, wrongPwdHtml, wrongTypePwd);
if (wrongTypePwd == 0 && wrongTypeName == 0) {//在用戶輸入信息完全合法的情況下,即數(shù)組下標(biāo)全部為0 開始執(zhí)行ajax驗證
//alert($.cookie("logout"));
if(editPass){
pwd = $.md5(pwd);
}
$("#passwd").val(pwd);
$("#login-form input").attr('disabled', true);
$('.remember').unbind('click');
//已經(jīng)向服務(wù)器提交了信息,所以將頁面上的所有輸入框按鈕設(shè)置成不可用狀態(tài),這樣可以有效的避免重復(fù)提交
var remb = $('#remember-long').val();
ajaxCheck(uname, pwd, remb);
}
});
var inputTip = function (index, tipHtml, tipNum) {
$(".reg-tip").eq(index).html(tipHtml[tipNum]);
if (tipNum > 0)
$(".reg-item").eq(index).addClass("error");
else
$(".reg-item").eq(index).removeClass("error");
} //定義錯誤提示信息頁面顯示函數(shù)。由于頁面只有兩個輸入框所以我這里直接指定了index,如果頁面上有很多,可以使用$(this).index()
var ajaxCheck = function (uname, pwd, remb) {
$(".btn-master").addClass("visibility");
var $params = "user_name=" + decodeURI(uname) + "&user_pwd=" + decodeURI(pwd) + "&remember=" + decodeURI(remb);
$.ajax({
type: 'POST',
url: 'CheckUserLogin.aspx',
//async: false,
cache: false,
dataType: 'json',
data: $params,
success: function (data, status) {
wrongTypeName = data.wrongTypeName;
wrongTypePwd = data.wrongTypePwd;
var loginSuccess = data.loginSuccess; //獲取服務(wù)器返回的json數(shù)據(jù)
if (loginSuccess == 0) {
if ($('#remember-long').val() == 1) {//記住密碼
$.cookie('UserName', uname, { expires: 7, path: '/' });
$.cookie('Password', pwd, { expires: 7, path: '/' });
}
else if ($('#remember-long').val() == 0) {//取消記住的密碼,或者沒有記住密碼
$.cookie('UserName', null,{ expires: 7, path: '/' });
$.cookie('Password', null,{ expires: 7, path: '/' });
}
location.href = "/Members/Members.html"
}
else {
$(".btn-master").removeClass("visibility");
$("#login-form input").attr('disabled', false);
inputTip(0, wrongNameHtml, wrongTypeName);
inputTip(1, wrongPwdHtml, wrongTypePwd);
}
},
error: function () {
wrongTypeName = 5;
inputTip(0, wrongNameHtml, wrongTypeName);
$("#login-form input").attr('disabled', false);
$('.remember').bind('click', function () { checkClick(); });
$(".btn-master").removeClass("visibility");
}
})
}
var checkClick = function () {
if ($('#remember-long').attr('checked')) {
$('#remember-long').attr('checked', false);
$('#remember-long').val("0")
}
else {
$('#remember-long').attr('checked', true);
$('#remember-long').val("1")
}
}
$('.remember').bind('click', function () { checkClick(); });
$("#remember-long").click(function () { checkClick(); });
//記住登錄的checkbox和label點(diǎn)擊的綁定。
if ($.browser.msie && $.browser.version == "6.0") {
//幫助微軟消滅ie6
if ($.cookie('masterShow') != "hidden")
$('body').append('<div class="master"><p>您的瀏覽器是<strong>IE6.0</strong>,漏洞較多,用戶體驗較差,微軟官方將要放棄支持,為了自身電腦安全和獲取最佳用戶體驗建議你根據(jù)自身需求升級至<a target="_blank" class="red"><strong>IE8.0</strong></a>以上版本或者使用<a target="_blank" class="red"><strong>火狐</strong></a>瀏覽器</p></div><div class="m-close m-close-short">關(guān)閉</div><div class="m-close m-close-long">不再顯示</div>');
$(".master").delay(1000).slideDown('', function () {
$(".m-close").fadeIn();
});
$(".m-close-short").click(function () {
$(".m-close").fadeOut('', function () {
$(".master").slideUp();
});
});
$(".m-close-long").click(function () {
$(".m-close").fadeOut('', function () {
$(".master").slideUp();
$.cookie('masterShow', 'hidden');
});
});
}
var rememberPassword = function (logout) {//頁面加載完成之后執(zhí)行自動登錄檢查
var ckname = $.cookie('UserName');
var ckpwd = $.cookie("Password");
if (ckname != "" && ckpwd != "" && ckname != null && ckpwd != null) {
$('#remember-long').val("1")
$('#remember-long').attr('checked', true);
$("#uname").val(ckname); //用戶名
$('.reg-item').addClass('focus');
if (logout=="safe"){
$.cookie("logout","",{ expires: 1, path: '/' })
}
else{
$("#passwd").val(ckpwd); //用戶密碼
$(".btn-submit").trigger('click'); //自動登錄
}
}
else {
$('#remember-long').val("0")
$('#remember-long').attr('checked', false);
}
}
var logout = $.cookie("logout");//判斷用戶是否是從內(nèi)部退出
rememberPassword(logout);
$(document).bind('keydown', 'return', function () { $(".btn-submit").trigger('click'); });
})
關(guān)于頁面中涉及的后臺程序,我用了頁面級別的aspx,當(dāng)然你也可以使用ashx來處理。這個后臺處理負(fù)責(zé)驗證密碼是否正確并在用戶正確登錄的情況下設(shè)置session值,如果需要演示,可以在后臺定義常量來做驗證判斷:
Hashtable ht = new Hashtable();
string uname = Request.Params["user_name"];
string pwd = Request.Params["user_pwd"];
int wrongTypeName = 0;
int wrongTypePwd = 0;
uname = PageValidate.InputText(uname, 30);
if (Validator.StrIsNullOrEmpty(uname))
{
wrongTypeName = 1;
}
if (Validator.StrIsNullOrEmpty(pwd))
{
wrongTypePwd = 1;
}
if (!string.IsNullOrEmpty(uname) && !string.IsNullOrEmpty(pwd))
{
//以下使用常量來做演示:
string userName="ethan.zhu";
string password ="";//需要MD5加密之后的字符串
if (uname==userName&&password==pwd )
ht.Add("loginSuccess", 0);
else
wrongTypeName = 4;//返回用戶名或密碼錯誤
if (wrongTypeName > 0 || wrongTypePwd > 0)
{
ht.Add("wrongTypeName", wrongTypeName);
ht.Add("wrongTypePwd", wrongTypePwd);
}
Response.Write(CreateJsonParams(ht));
}
Response.End();
}
將Hashtable轉(zhuǎn)換成json:
public static string CreateJsonParams(Hashtable items)
{
string returnStr = "";
foreach (DictionaryEntry item in items)
{
returnStr += "\"" + item.Key.ToString() + "\":\"" + item.Value.ToString() + "\",";
}
return "{" + returnStr.Substring(0, returnStr.Length - 1) + "}";
}
可直接在IIS下運(yùn)行;
用戶名:Ethan.zhu
密 碼:123456789
完整文件下載:WebApplication1_jb51.rar
首先將按鈕單擊事件的異步驗證提取出來作為一個單獨(dú)的函數(shù),需要將按鈕單擊事件里面的變量提取出來定義為全局變量,并且增加一個變量editPass(用來標(biāo)記是自己輸入密碼,還是從cookies中讀取的密碼)
復(fù)制代碼 代碼如下:
var wrongTypeName, //用戶名的錯誤類型,可以直接作為錯誤提示信息數(shù)組的下標(biāo)
wrongTypePwd, //用戶密碼的錯誤類型
wrongNameHtml = new Array("", "請輸入用戶名", "用戶名長度太短", "用戶名長度超過12位", "您的用戶名或密碼錯誤", "超時,請重新登陸"),
wrongPwdHtml = new Array("", "請輸入密碼", "密碼長度小于6位", "", "密碼中含有非法字符"),
editPass=false;
這里從上一篇的按鈕單擊事件開始:
復(fù)制代碼 代碼如下:
$(".btn-submit").click(function () {
wrongTypeName = 0;
wrongTypePwd = 0;
var uname = $("#uname").val(), //用戶名
pwd = $("#passwd").val(), //用戶密碼
plength = pwd.length,
nlength = uname.length; //長度
if (nlength == 0)
wrongTypeName = 1;
if (nlength > 0 && nlength < 2)
wrongTypeName = 2;
if (nlength > 20)
wrongTypeName = 3;
if (plength == 0)
wrongTypePwd = 1; //這里是對用戶名和密碼長度的一個判斷,并獲取錯誤信息數(shù)組的下標(biāo)。
else {
var patrn = /^(\w){6,20}$/;
if (plength < 6)
wrongTypePwd = 2;
if (plength > 50)
wrongTypePwd = 3;
if (plength > 6 && plength < 20) {
if (!patrn.exec(pwd))
wrongTypePwd = 4; //這里是對用戶密碼合法性的前端判斷,并返回錯誤數(shù)組的下標(biāo)
}
}
inputTip(0, wrongNameHtml, wrongTypeName);
inputTip(1, wrongPwdHtml, wrongTypePwd);
if (wrongTypePwd == 0 && wrongTypeName == 0) {//在用戶輸入信息完全合法的情況下,即數(shù)組下標(biāo)全部為0 開始執(zhí)行ajax驗證
//alert($.cookie("logout"));
if(editPass){
pwd = $.md5(pwd);
}
$("#passwd").val(pwd);
$("#login-form input").attr('disabled', true);
$('.remember').unbind('click');
//已經(jīng)向服務(wù)器提交了信息,所以將頁面上的所有輸入框按鈕設(shè)置成不可用狀態(tài),這樣可以有效的避免重復(fù)提交
var remb = $('#remember-long').val();
ajaxCheck(uname, pwd, remb);
}
});
變化在33行和41行,
行用來判斷密碼是用戶在程序內(nèi)部退出到登錄頁面的時候是自行輸入還是從cookies中讀取的。防止二次加密造成服務(wù)器驗證失敗。
行主要是將ajax處理過程提取出來,同時加入了服務(wù)器驗證成功之后的記住密碼和取消記住密碼的操作,方便閱讀:
復(fù)制代碼 代碼如下:
var ajaxCheck = function (uname, pwd, remb) {
$(".btn-master").addClass("visibility");
var $params = "user_name=" + decodeURI(uname) + "&user_pwd=" + decodeURI(pwd) + "&remember=" + decodeURI(remb);
$.ajax({
type: 'POST',
url: 'CheckUserLogin.aspx',
//async: false,
cache: false,
dataType: 'json'
data: $params,
success: function (data, status) {
wrongTypeName = data.wrongTypeName;
wrongTypePwd = data.wrongTypePwd;
var loginSuccess = data.loginSuccess; //獲取服務(wù)器返回的json數(shù)據(jù)
if (loginSuccess == 0) {
if ($('#remember-long').val() == 1) {//記住密碼
$.cookie('UserName', uname, { expires: 7, path: '/' });
$.cookie('Password', pwd, { expires: 7, path: '/' });
}
else if ($('#remember-long').val() == 0) {//取消記住的密碼,或者沒有記住密碼
$.cookie('UserName', null,{ expires: 7, path: '/' });
$.cookie('Password', null,{ expires: 7, path: '/' });
}
location.href = "/Members/Members.html"
}
else {
$(".btn-master").removeClass("visibility");
$("#login-form input").attr('disabled', false);
inputTip(0, wrongNameHtml, wrongTypeName);
inputTip(1, wrongPwdHtml, wrongTypePwd);
}
},
error: function () {
wrongTypeName = 5;
inputTip(0, wrongNameHtml, wrongTypeName);
$("#login-form input").attr('disabled', false);
$('.remember').bind('click', function () { checkClick(); });
$(".btn-master").removeClass("visibility");
}
})
}
頁面初始化的時候要對記住密碼這個過程進(jìn)行處理:
復(fù)制代碼 代碼如下:
var rememberPassword = function (logout) {//頁面加載完成之后執(zhí)行自動登錄檢查
var ckname = $.cookie('UserName');
var ckpwd = $.cookie("Password");
if (ckname != "" && ckpwd != "" && ckname != null && ckpwd != null) {
$('#remember-long').val("1")
$('#remember-long').attr('checked', true);
$("#uname").val(ckname); //用戶名
$('.reg-item').addClass('focus');
if (logout=="safe"){
$.cookie("logout","",{ expires: 1, path: '/' })
}
else{
$("#passwd").val(ckpwd); //用戶密碼
$(".btn-submit").trigger('click'); //自動登錄
}
}
else {
$('#remember-long').val("0")
$('#remember-long').attr('checked', false);
}
}
var logout = $.cookie("logout");
//判斷用戶是否是從內(nèi)部退出還是直接打開
//如果是從內(nèi)部退出,那么就不能再次自動登錄進(jìn)去,除非用戶刷新了頁面
rememberPassword(logout);
下面是完整的全新的前端腳本:
復(fù)制代碼 代碼如下:
$(function () {
var wrongTypeName, //用戶名的錯誤類型,可以直接作為錯誤提示信息數(shù)組的下標(biāo)
wrongTypePwd, //用戶密碼的錯誤類型
wrongNameHtml = new Array("", "請輸入用戶名", "用戶名長度太短", "用戶名長度超過12位", "您的用戶名或密碼錯誤", "超時,請重新登陸"),
wrongPwdHtml = new Array("", "請輸入密碼", "密碼長度小于6位", "", "密碼中含有非法字符"),
editPass=false;
$('body').focus(); //讓輸入框不再自動獲取焦點(diǎn)
$('.reg-action .reg-input').each(function () {
var items = $(this).parent('.reg-item');
if ($(this).val()) {
items.addClass("focus");
}
$(this).bind('focus blur', function (event) {
var type = event.type; //獲取事件類型
if($(this).attr("id")=="passwd"){
editPass = true;
}
if (type == 'focus') {
if (items.hasClass('error')) {
$(this).val("");
items.removeClass('error');
}
items.addClass('focus');
} else if (!$(this).val()) {
items.removeClass('focus');
}
})
});
$(".btn-submit").click(function () {
wrongTypeName = 0;
wrongTypePwd = 0;
var uname = $("#uname").val(), //用戶名
pwd = $("#passwd").val(), //用戶密碼
plength = pwd.length,
nlength = uname.length; //長度
if (nlength == 0)
wrongTypeName = 1;
if (nlength > 0 && nlength < 2)
wrongTypeName = 2;
if (nlength > 20)
wrongTypeName = 3;
if (plength == 0)
wrongTypePwd = 1; //這里是對用戶名和密碼長度的一個判斷,并獲取錯誤信息數(shù)組的下標(biāo)。
else {
var patrn = /^(\w){6,20}$/;
if (plength < 6)
wrongTypePwd = 2;
if (plength > 50)
wrongTypePwd = 3;
if (plength > 6 && plength < 20) {
if (!patrn.exec(pwd))
wrongTypePwd = 4; //這里是對用戶密碼合法性的前端判斷,并返回錯誤數(shù)組的下標(biāo)
}
}
inputTip(0, wrongNameHtml, wrongTypeName);
inputTip(1, wrongPwdHtml, wrongTypePwd);
if (wrongTypePwd == 0 && wrongTypeName == 0) {//在用戶輸入信息完全合法的情況下,即數(shù)組下標(biāo)全部為0 開始執(zhí)行ajax驗證
//alert($.cookie("logout"));
if(editPass){
pwd = $.md5(pwd);
}
$("#passwd").val(pwd);
$("#login-form input").attr('disabled', true);
$('.remember').unbind('click');
//已經(jīng)向服務(wù)器提交了信息,所以將頁面上的所有輸入框按鈕設(shè)置成不可用狀態(tài),這樣可以有效的避免重復(fù)提交
var remb = $('#remember-long').val();
ajaxCheck(uname, pwd, remb);
}
});
var inputTip = function (index, tipHtml, tipNum) {
$(".reg-tip").eq(index).html(tipHtml[tipNum]);
if (tipNum > 0)
$(".reg-item").eq(index).addClass("error");
else
$(".reg-item").eq(index).removeClass("error");
} //定義錯誤提示信息頁面顯示函數(shù)。由于頁面只有兩個輸入框所以我這里直接指定了index,如果頁面上有很多,可以使用$(this).index()
var ajaxCheck = function (uname, pwd, remb) {
$(".btn-master").addClass("visibility");
var $params = "user_name=" + decodeURI(uname) + "&user_pwd=" + decodeURI(pwd) + "&remember=" + decodeURI(remb);
$.ajax({
type: 'POST',
url: 'CheckUserLogin.aspx',
//async: false,
cache: false,
dataType: 'json',
data: $params,
success: function (data, status) {
wrongTypeName = data.wrongTypeName;
wrongTypePwd = data.wrongTypePwd;
var loginSuccess = data.loginSuccess; //獲取服務(wù)器返回的json數(shù)據(jù)
if (loginSuccess == 0) {
if ($('#remember-long').val() == 1) {//記住密碼
$.cookie('UserName', uname, { expires: 7, path: '/' });
$.cookie('Password', pwd, { expires: 7, path: '/' });
}
else if ($('#remember-long').val() == 0) {//取消記住的密碼,或者沒有記住密碼
$.cookie('UserName', null,{ expires: 7, path: '/' });
$.cookie('Password', null,{ expires: 7, path: '/' });
}
location.href = "/Members/Members.html"
}
else {
$(".btn-master").removeClass("visibility");
$("#login-form input").attr('disabled', false);
inputTip(0, wrongNameHtml, wrongTypeName);
inputTip(1, wrongPwdHtml, wrongTypePwd);
}
},
error: function () {
wrongTypeName = 5;
inputTip(0, wrongNameHtml, wrongTypeName);
$("#login-form input").attr('disabled', false);
$('.remember').bind('click', function () { checkClick(); });
$(".btn-master").removeClass("visibility");
}
})
}
var checkClick = function () {
if ($('#remember-long').attr('checked')) {
$('#remember-long').attr('checked', false);
$('#remember-long').val("0")
}
else {
$('#remember-long').attr('checked', true);
$('#remember-long').val("1")
}
}
$('.remember').bind('click', function () { checkClick(); });
$("#remember-long").click(function () { checkClick(); });
//記住登錄的checkbox和label點(diǎn)擊的綁定。
if ($.browser.msie && $.browser.version == "6.0") {
//幫助微軟消滅ie6
if ($.cookie('masterShow') != "hidden")
$('body').append('<div class="master"><p>您的瀏覽器是<strong>IE6.0</strong>,漏洞較多,用戶體驗較差,微軟官方將要放棄支持,為了自身電腦安全和獲取最佳用戶體驗建議你根據(jù)自身需求升級至<a target="_blank" class="red"><strong>IE8.0</strong></a>以上版本或者使用<a target="_blank" class="red"><strong>火狐</strong></a>瀏覽器</p></div><div class="m-close m-close-short">關(guān)閉</div><div class="m-close m-close-long">不再顯示</div>');
$(".master").delay(1000).slideDown('', function () {
$(".m-close").fadeIn();
});
$(".m-close-short").click(function () {
$(".m-close").fadeOut('', function () {
$(".master").slideUp();
});
});
$(".m-close-long").click(function () {
$(".m-close").fadeOut('', function () {
$(".master").slideUp();
$.cookie('masterShow', 'hidden');
});
});
}
var rememberPassword = function (logout) {//頁面加載完成之后執(zhí)行自動登錄檢查
var ckname = $.cookie('UserName');
var ckpwd = $.cookie("Password");
if (ckname != "" && ckpwd != "" && ckname != null && ckpwd != null) {
$('#remember-long').val("1")
$('#remember-long').attr('checked', true);
$("#uname").val(ckname); //用戶名
$('.reg-item').addClass('focus');
if (logout=="safe"){
$.cookie("logout","",{ expires: 1, path: '/' })
}
else{
$("#passwd").val(ckpwd); //用戶密碼
$(".btn-submit").trigger('click'); //自動登錄
}
}
else {
$('#remember-long').val("0")
$('#remember-long').attr('checked', false);
}
}
var logout = $.cookie("logout");//判斷用戶是否是從內(nèi)部退出
rememberPassword(logout);
$(document).bind('keydown', 'return', function () { $(".btn-submit").trigger('click'); });
})
關(guān)于頁面中涉及的后臺程序,我用了頁面級別的aspx,當(dāng)然你也可以使用ashx來處理。這個后臺處理負(fù)責(zé)驗證密碼是否正確并在用戶正確登錄的情況下設(shè)置session值,如果需要演示,可以在后臺定義常量來做驗證判斷:
復(fù)制代碼 代碼如下:
Hashtable ht = new Hashtable();
string uname = Request.Params["user_name"];
string pwd = Request.Params["user_pwd"];
int wrongTypeName = 0;
int wrongTypePwd = 0;
uname = PageValidate.InputText(uname, 30);
if (Validator.StrIsNullOrEmpty(uname))
{
wrongTypeName = 1;
}
if (Validator.StrIsNullOrEmpty(pwd))
{
wrongTypePwd = 1;
}
if (!string.IsNullOrEmpty(uname) && !string.IsNullOrEmpty(pwd))
{
//以下使用常量來做演示:
string userName="ethan.zhu";
string password ="";//需要MD5加密之后的字符串
if (uname==userName&&password==pwd )
ht.Add("loginSuccess", 0);
else
wrongTypeName = 4;//返回用戶名或密碼錯誤
if (wrongTypeName > 0 || wrongTypePwd > 0)
{
ht.Add("wrongTypeName", wrongTypeName);
ht.Add("wrongTypePwd", wrongTypePwd);
}
Response.Write(CreateJsonParams(ht));
}
Response.End();
}
將Hashtable轉(zhuǎn)換成json:
復(fù)制代碼 代碼如下:
public static string CreateJsonParams(Hashtable items)
{
string returnStr = "";
foreach (DictionaryEntry item in items)
{
returnStr += "\"" + item.Key.ToString() + "\":\"" + item.Value.ToString() + "\",";
}
return "{" + returnStr.Substring(0, returnStr.Length - 1) + "}";
}
您可能感興趣的文章:
- jquery.cookie.js 操作cookie實(shí)現(xiàn)記住密碼功能的實(shí)現(xiàn)代碼
- JQuery記住用戶名和密碼的具體實(shí)現(xiàn)
- JQuery記住用戶名密碼實(shí)現(xiàn)下次自動登錄功能
- 通過jquery.cookie.js實(shí)現(xiàn)記住用戶名、密碼登錄功能
- 使用jquery的cookie實(shí)現(xiàn)登錄頁記住用戶名和密碼的方法
- jquery.cookie.js實(shí)現(xiàn)用戶登錄保存密碼功能的方法
- jQuery加密密碼到cookie的實(shí)現(xiàn)代碼
- jQuery.cookie.js實(shí)現(xiàn)記錄最近瀏覽過的商品功能示例
- jquery使用Cookie和JSON記錄用戶最近瀏覽歷史
- 通過Jquery.cookie.js實(shí)現(xiàn)展示瀏覽網(wǎng)頁的歷史記錄超管用
- jQuery實(shí)現(xiàn)的記住帳號密碼功能完整示例
相關(guān)文章
jQuery EasyUI API 中文文檔 - ComboTree組合樹
jQuery EasyUI API 中文文檔 - ComboTree組合樹,需要的朋友可以參考下。2011-10-10jQuery取得設(shè)置清空select選擇的文本與值
這篇文章主要介紹了jQuery如何取得設(shè)置清空select選擇的文本與值,下面有個不錯的示例,需要的朋友可以參考下2014-07-07關(guān)于hashchangebroker和statehashable的補(bǔ)充文檔
我覺得之前寫的兩篇隨筆有點(diǎn)不負(fù)責(zé)任,完全沒寫明白,補(bǔ)充了一份文檔(權(quán)且算是文檔吧=.=)2011-08-08jQuery實(shí)現(xiàn)簡單的下拉菜單導(dǎo)航功能示例
這篇文章主要介紹了jQuery實(shí)現(xiàn)簡單的下拉菜單導(dǎo)航功能,涉及jQuery針對頁面元素的遍歷與節(jié)點(diǎn)修改相關(guān)操作技巧,需要的朋友可以參考下2017-12-12Jquery實(shí)現(xiàn)圖片預(yù)加載與延時加載的方法
這篇文章主要介紹了Jquery實(shí)現(xiàn)圖片預(yù)加載與延時加載的方法,分別介紹了原生javascript與jQuery插件實(shí)現(xiàn)圖片的預(yù)加載及延遲加載的方法,具有一定的參考借鑒價值,需要的朋友可以參考下2014-12-12jQuery中使用了document和window哪些屬性和方法小結(jié)
未列出常見的比如document.getElementById(),object.addEventListener()等。2011-09-09JS拖動選擇table里的單元格完整實(shí)例【基于jQuery】
這篇文章主要介紹了JS拖動選擇table里的單元格,結(jié)合完整實(shí)例形式分析了基于jQuery的table表格動態(tài)操作相關(guān)實(shí)現(xiàn)技巧,涉及事件響應(yīng)及頁面元素屬性動態(tài)操作使用方法,需要的朋友可以參考下2019-05-05