Maison interface Web js tutoriel 使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)_jquery

使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)_jquery

May 16, 2016 pm 06:05 PM
用户体验 登录页面

需要引入插件jquery.md5.js
可直接在IIS下运行;
用户名:Ethan.zhu
密 码:123456789
完整文件下载:WebApplication1_jb51.rar

首先将按钮单击事件的异步验证提取出来作为一个单独的函数,需要将按钮单击事件里面的变量提取出来定义为全局变量,并且增加一个变量editPass(用来标记是自己输入密码,还是从cookies中读取的密码)

复制代码 代码如下:

var wrongTypeName, //用户名的错误类型,可以直接作为错误提示信息数组的下标
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 wrongTypeName = 2;
if (nlength > 20)
wrongTypeName = 3;
if (plength == 0)
wrongTypePwd = 1; //这里是对用户名和密码长度的一个判断,并获取错误信息数组的下标。
else {
var patrn = /^(\w){6,20}$/;
if (plength wrongTypePwd = 2;
if (plength > 50)
wrongTypePwd = 3;
if (plength > 6 && plength if (!patrn.exec(pwd))
wrongTypePwd = 4; //这里是对用户密码合法性的前端判断,并返回错误数组的下标
}
}

inputTip(0, wrongNameHtml, wrongTypeName);
inputTip(1, wrongPwdHtml, wrongTypePwd);

if (wrongTypePwd == 0 && wrongTypeName == 0) {//在用户输入信息完全合法的情况下,即数组下标全部为0 开始执行ajax验证
//alert($.cookie("logout"));
if(editPass){
pwd = $.md5(pwd);
}
$("#passwd").val(pwd);
$("#login-form input").attr('disabled', true);
$('.remember').unbind('click');
//已经向服务器提交了信息,所以将页面上的所有输入框按钮设置成不可用状态,这样可以有效的避免重复提交
var remb = $('#remember-long').val();
ajaxCheck(uname, pwd, remb);
}
});

变化在33行和41行,

行用来判断密码是用户在程序内部退出到登录页面的时候是自行输入还是从cookies中读取的。防止二次加密造成服务器验证失败。

行主要是将ajax处理过程提取出来,同时加入了服务器验证成功之后的记住密码和取消记住密码的操作,方便阅读:
复制代码 代码如下:

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; //获取服务器返回的json数据
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 rememberPassword = function (logout) {//页面加载完成之后执行自动登录检查
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");
    //判断用户是否是从内部退出还是直接打开
//如果是从内部退出,那么就不能再次自动登录进去,除非用户刷新了页面
rememberPassword(logout);

下面是完整的全新的前端脚本:
复制代码 代码如下:

$(function () {

var wrongTypeName, //用户名的错误类型,可以直接作为错误提示信息数组的下标
wrongTypePwd, //用户密码的错误类型
wrongNameHtml = new Array("", "请输入用户名", "用户名长度太短", "用户名长度超过12位", "您的用户名或密码错误", "超时,请重新登陆"),
wrongPwdHtml = new Array("", "请输入密码", "密码长度小于6位", "", "密码中含有非法字符"),
editPass=false;

$('body').focus(); //让输入框不再自动获取焦点

$('.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 wrongTypeName = 2;
if (nlength > 20)
wrongTypeName = 3;
if (plength == 0)
wrongTypePwd = 1; //这里是对用户名和密码长度的一个判断,并获取错误信息数组的下标。
else {
var patrn = /^(\w){6,20}$/;
if (plength wrongTypePwd = 2;
if (plength > 50)
wrongTypePwd = 3;
if (plength > 6 && plength if (!patrn.exec(pwd))
wrongTypePwd = 4; //这里是对用户密码合法性的前端判断,并返回错误数组的下标
}
}

inputTip(0, wrongNameHtml, wrongTypeName);
inputTip(1, wrongPwdHtml, wrongTypePwd);

if (wrongTypePwd == 0 && wrongTypeName == 0) {//在用户输入信息完全合法的情况下,即数组下标全部为0 开始执行ajax验证
//alert($.cookie("logout"));
if(editPass){
pwd = $.md5(pwd);
}
$("#passwd").val(pwd);
$("#login-form input").attr('disabled', true);
$('.remember').unbind('click');
//已经向服务器提交了信息,所以将页面上的所有输入框按钮设置成不可用状态,这样可以有效的避免重复提交
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");
} //定义错误提示信息页面显示函数。由于页面只有两个输入框所以我这里直接指定了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; //获取服务器返回的json数据
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点击的绑定。

if ($.browser.msie && $.browser.version == "6.0") {
//帮助微软消灭ie6
if ($.cookie('masterShow') != "hidden")
$('body').append('

您的浏览器是IE6.0,漏洞较多,用户体验较差,微软官方将要放弃支持,为了自身电脑安全和获取最佳用户体验建议你根据自身需求升级至IE8.0以上版本或者使用火狐浏览器

关闭
不再显示
');
$(".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) {//页面加载完成之后执行自动登录检查
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");//判断用户是否是从内部退出
rememberPassword(logout);

$(document).bind('keydown', 'return', function () { $(".btn-submit").trigger('click'); });
})

关于页面中涉及的后台程序,我用了页面级别的aspx,当然你也可以使用ashx来处理。这个后台处理负责验证密码是否正确并在用户正确登录的情况下设置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转换成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) + "}";

}
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comprendre les différences d'expérience utilisateur entre vivox100s et x100 Comprendre les différences d'expérience utilisateur entre vivox100s et x100 Mar 23, 2024 pm 05:18 PM

Avec le développement continu de la science et de la technologie, les besoins des gens en équipements de communication augmentent également constamment. Sur le marché, les Vivox100 et X100 sont deux marques de téléphones mobiles qui ont beaucoup retenu l'attention. Ils ont tous des caractéristiques uniques et chacun possède ses propres avantages. Cet article comparera les différences d'expérience utilisateur entre ces deux téléphones mobiles pour aider les consommateurs à mieux les comprendre. Il existe des différences évidentes dans la conception de l'apparence entre les Vivox100 et les X100. Vivox100s adopte un style de conception à la mode et simple, avec un corps fin et léger et une sensation de main confortable tandis que le X100 accorde plus d'attention à la praticité ;

Pourquoi certaines personnes pensent-elles que la photographie sur Android peut battre Apple ? La réponse est si directe Pourquoi certaines personnes pensent-elles que la photographie sur Android peut battre Apple ? La réponse est si directe Mar 25, 2024 am 09:50 AM

Lorsqu'ils discutent de la fonction appareil photo des téléphones Android, la plupart des utilisateurs lui donnent des commentaires positifs. Par rapport aux téléphones Apple, les utilisateurs pensent généralement que les téléphones Android ont de meilleures performances en matière d'appareil photo. Cette opinion n’est pas sans fondement et les raisons pratiques sont évidentes. Les téléphones Android haut de gamme présentent de plus grands avantages concurrentiels en termes de configuration matérielle, notamment en termes de capteurs de caméra. De nombreux téléphones Android haut de gamme utilisent les derniers capteurs d'appareil photo haut de gamme, qui sont souvent plus remarquables que les iPhones commercialisés au même moment en termes de nombre de pixels, de taille d'ouverture et de capacités de zoom optique. Cet avantage permet aux téléphones Android de fournir des effets d'imagerie de meilleure qualité lors de la prise de photos et de l'enregistrement de vidéos, répondant ainsi aux besoins des utilisateurs en matière de photographie et de vidéographie. Par conséquent, l’avantage concurrentiel de la configuration matérielle est devenu un facteur attractif pour les téléphones Android.

Xiaomi Auto APP est en tête de la liste gratuite de l'App Store d'Apple, avec des ventes officielles de près de 90 000 Xiaomi Auto APP est en tête de la liste gratuite de l'App Store d'Apple, avec des ventes officielles de près de 90 000 Apr 01, 2024 am 09:56 AM

Le 31 mars, CNMO a remarqué que l'application mobile Xiaomi Auto était en tête du classement des applications gratuites de l'App Store d'Apple le 31 mars. Il est rapporté que l’application officielle de Xiaomi Auto a gagné la faveur d’un grand nombre d’utilisateurs grâce à ses fonctions complètes et son excellente expérience utilisateur, se classant rapidement au premier rang de la liste. Cette très attendue application Xiaomi Auto réalise non seulement une connexion transparente du processus d'achat de voiture en ligne, mais intègre également des services de contrôle à distance du véhicule. Les utilisateurs peuvent effectuer une série d'opérations intelligentes telles que la demande d'état du véhicule et le fonctionnement à distance sans quitter leur domicile. Surtout lorsque le nouveau modèle de Xiaomi Motors SU7 est sorti, l'application est lancée simultanément. Les utilisateurs peuvent comprendre intuitivement les détails de configuration du SU7 via l'application et terminer avec succès la précommande. Conception interne de l'application Xiaomi Auto

Quels sont les cinq éléments de l'expérience utilisateur ? Quels sont les cinq éléments de l'expérience utilisateur ? Aug 26, 2022 pm 05:24 PM

Cinq éléments de l'expérience utilisateur : 1. Les besoins des utilisateurs, ce que les utilisateurs et les opérateurs souhaitent obtenir de ce produit ; 2. L'étendue des fonctions, quelles sont les fonctions de ce produit ; 3. La conception des processus, qui peut être divisée en deux grandes catégories : l'interaction ; conception et architecture de l'information. Dans cette partie, la conception d'interaction décrit le « comportement possible de l'utilisateur » et l'architecture de l'information se concentre sur la manière d'exprimer les informations aux utilisateurs. 4. Conception de prototypage, en décidant où les éléments interactifs tels qu'une section ou un bouton doivent être placés sur le site ; page ; 5. Conception perceptuelle, c'est la réunion du contenu, de la fonctionnalité et de l'esthétique pour produire une conception finale qui satisfait tous les objectifs à d'autres niveaux.

Analyser le processus de communication côté serveur de Vue : comment améliorer l'expérience utilisateur Analyser le processus de communication côté serveur de Vue : comment améliorer l'expérience utilisateur Aug 10, 2023 am 11:19 AM

Analyser le processus de communication côté serveur de Vue : Comment améliorer l'expérience utilisateur Introduction : Avec le développement rapide d'Internet, la communication entre le client et le serveur est devenue de plus en plus importante. En tant que framework JavaScript moderne, Vue offre aux développeurs une multitude d'outils et de technologies pour mettre en œuvre la communication côté serveur. Cet article approfondira le processus de communication côté serveur de Vue et présentera quelques conseils et bonnes pratiques pour améliorer l'expérience utilisateur. 1. Présentation du processus de communication côté serveur de Vue Le processus de communication côté serveur de Vue comprend les étapes clés suivantes

ViewSonic fait ses débuts au ChinaJoy2024 avec un superbe grand écran 8K ViewSonic fait ses débuts au ChinaJoy2024 avec un superbe grand écran 8K Jul 24, 2024 pm 01:33 PM

Du 26 au 29 juillet, le salon annuel ChinaJoy2024 sera inauguré en grande pompe au nouveau centre d'exposition international de Shanghai. ViewSonic s'associera à ZOL Zhongguancun Online pour créer une couverture complète de la vision, de l'audition et du toucher pour les utilisateurs et les passionnés de jeux. festin. ZOL ZOL Zhongguancun Online est un portail informatique interactif qui couvre l'ensemble du pays et est positionné pour promouvoir les ventes. Il s'agit d'un média composite qui intègre des données sur les produits, des informations professionnelles, des vidéos technologiques et un marketing interactif. Zhongguancun Online a brisé le mur dimensionnel et est apparu sur le stand S101 du hall E7 de ChinaJoy avec le thème « Tendance et amusant », offrant une expérience d'exposition diversifiée et immersive au public et aux initiés de l'industrie du monde entier. Zone d'exposition ViewSonic : Explorez la technologie d'affichage haut de gamme 1

Meilleurs plugins pour php CodeIgniter : faites passer votre site Web au niveau supérieur Meilleurs plugins pour php CodeIgniter : faites passer votre site Web au niveau supérieur Feb 19, 2024 pm 11:48 PM

CodeIgniter est un framework PHP puissant, mais vous aurez parfois besoin de fonctionnalités supplémentaires pour étendre ses capacités. Les plugins peuvent vous aider à y parvenir. Ils peuvent fournir une variété de fonctions, allant de l’amélioration des performances du site Web à l’amélioration de la sécurité. 1.Le plugin Hmvc HMVC (Hierarchical Model View Controller) vous permet d'utiliser l'architecture MVC en couches dans CodeIgniter. Ceci est utile pour les grands projets avec une logique métier complexe. En utilisant HMVC, vous pouvez organiser les contrôleurs en différents modules et charger et décharger ces modules selon vos besoins. Code de démonstration : //Ajoutez le code suivant dans config/routes.php : $route["/module/contr

Mar 22, 2024 pm 06:31 PM

Le 21 mars, CNMO a remarqué que DXOMARK avait annoncé les résultats des tests d'écran du Huawei Mate60Pro, avec un score de 143 points, se classant au milieu du classement mondial des écrans. Selon l'examen de DXOMARK, l'écran de l'appareil offre une expérience utilisateur confortable. Par rapport à la génération précédente de Huawei Mate50Pro, la dernière version de l'écran présente des améliorations significatives en termes de réponse au mouvement, au toucher et à la gestion des artefacts, permettant aux utilisateurs de profiter d'une meilleure expérience visuelle. La lisibilité de l'écran maintient essentiellement le niveau du produit de la génération précédente. Bien que la luminosité dans les environnements à faible luminosité soit légèrement insuffisante, l'écran de l'appareil présente une bonne lisibilité et un rendu des couleurs précis dans la plupart des conditions de lumière ambiante. La lisibilité est assez bonne surtout en extérieur, et la luminosité de l'écran atteint

See all articles