


Jquery を使用して、最高のユーザー エクスペリエンスを備えたログイン ページを構築し、パスワードを記憶する自動ログイン機能 (バックグラウンド コードを含む)_jquery
プラグイン jquery.md5.js を導入する必要があります
IIS で直接実行できます。
ユーザー名: Ethan.zhu
パスワード: 123456789
完全なファイルのダウンロード: WebApplication1_jb51.rar
まず、ボタンクリックイベントの非同期検証を別関数として抽出します。ボタンクリックイベント内の変数を抽出してグローバル変数として定義し、変数 editPass (使用) を追加する必要があります。自分で入力にマークを付けるため) パスワード、または Cookie から読み取ったパスワード)
var worstTypeName, //間違ったタイプのユーザー名はエラー メッセージ配列の添字として直接使用できます
wrongTypePwd, //間違ったタイプのユーザー パスワード
wrongNameHtml = new Array("", "ユーザー名を入力してください", "ユーザー名が短すぎます", "ユーザー名が 12 文字を超えています", "ユーザー名またはパスワードが間違っています", "タイムアウトしました。もう一度ログインしてください"),
wrongPwdHtml = new Array("", "パスワードを入力してください", "パスワードの長さが 6 文字未満です", "", "パスワードに不正な文字が含まれています"),
editPass=false; 🎜>前の記事のボタンクリックイベントから開始します:
var uname = $("#uname").val( ), //ユーザー名
pwd = $("# passwd").val(), //ユーザーパスワード
plength = pwd.length,
nlength = uname.length
; if (nlength == 0)
間違ったタイプ名 = 1;
if (nlength > 0 && nlength 間違ったタイプ名 = 2;
if (nlength > 20)
間違ったタイプ名= 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; user フロントエンドはパスワードの有効性を判断し、エラー配列の添字を返します。 , lowerTypePwd);
if (wrongTypePwd == 0 && worstTypeName == 0) {//ユーザー入力情報が完全に正しい場合、つまり配列の添字がすべて 0 の場合、ajax 検証の実行を開始します
//alert($.cookie("logout"));
if(editPass){
pwd = $.md5(pwd);
$("#passwd"); (pwd);
$("#ログインフォーム入力").attr('disabled', true);
$('.remember').unbind('click');情報はサーバーに送信されているため、ページ上のすべての入力ボックスのボタンを無効な状態に設定します。これにより、繰り返しの送信を効果的に回避できます。
var remb = $('#remember-long').val(); 🎜>ajaxCheck(uname, pwd, remb);
}
});
は 33 行目と 41 行目で変更されます。パスワードは、ユーザーがプログラム内で終了するときに使用するパスワードです。ページにログインするときに自分で入力しますか、それとも Cookie から読み取りますか?二次暗号化によってサーバー検証が失敗するのを防ぎます。
行は主に 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, { 有効期限: 7, パス: '/' }); ( 'パスワード', pwd, { 有効期限: 7, パス: '/' });
}
else if ($('#remember-long').val() == 0) {//キャンセル パスワードが記憶されているか、パスワードが記憶されていません
$.cookie('UserName', null,{ 有効期限: 7, パス: '/' });
$.cookie('パスワード', null,{ 有効期限: 7、パス: '/' });
}
location.href = "/Members/Members.html"
}
else {
$(".btn-master ") .removeClass("可視性");
$("#ログインフォーム入力").attr('無効', false);
inputTip(0, 間違った名前Html, 間違ったタイプ名);間違ったPwdHtml、間違ったタイプPwd);
}
}、
エラー: function () {
間違ったタイプ名 = 5;
inputTip(0, 間違った名前Html, 間違ったタイプ名); -form input").attr('disabled', false);
$('.remember').bind('click', function () { checkClick(); });
$( ". btn-master").removeClass("visibility");
}
})
}
ページの初期化時に、パスワードを記憶するプロセスが処理される必要があります:
if (ckname != "" && ckpwd ! = "" && ckname != null && ckpwd != null) {
$('#remember-long').val("1")
$('#remember-long'). attr(' チェック済み', true);
$("#uname").val(ckname); //ユーザー名
$('.reg-item').addClass('focus'); >if (logout=="safe"){
$.cookie("logout","",{ 有効期限: 1, パス: '/' })
}
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 worstTypeName, //エラー メッセージ配列の添え字として直接使用できる、間違ったタイプのユーザー名です。
wrongTypePwd, / /ユーザーのパスワードが間違っています Type
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; //Getイベントタイプ
if($(this).attr ("id")=="passwd"){
editPass = true;
}
if (type == 'focus') {
if (items.hasClass('error')) {
$(this).val("");
items.removeClass('error'); 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;
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; user フロントエンドはパスワードの有効性を判断し、エラー配列の添字を返します。 , lowerTypePwd);
if (wrongTypePwd == 0 && worstTypeName == 0) {//ユーザー入力情報が完全に正しい場合、つまり配列の添字がすべて 0 の場合、ajax 検証の実行を開始します
//alert($.cookie("logout"));
if(editPass){
pwd = $.md5(pwd);
$("#passwd"); (pwd);
$("#ログインフォーム入力").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");
} //エラーメッセージページ表示関数を定義します。ページ上には入力ボックスが 2 つしかないため、ページ上に入力ボックスが多数ある場合は、$(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, { 有効期限: 7, パス: '/' });
$.cookie('Password', pwd, { 有効期限: 7, path: '/' }) ;
}
else if ($('#remember-long').val() == 0) {//記憶されたパスワードをキャンセルするか、パスワードを記憶しない
$.cookie(' ユーザー名', null,{ 有効期限: 7, パス: '/' });
$.cookie('パスワード', null,{ 有効期限: 7, パス: '/' }) ;
}
location.href = "/Members/Members.html"
}
else {
$(".btn-master").removeClass("visibility"); 🎜>$("#login -form input").attr('disabled', false);
inputTip(0, 間違った名前Html, 間違ったタイプ名);
inputTip(1, 間違ったPwdHtml, 間違ったTypePwd);
},
error: function () {
間違ったタイプ名 = 5;
inputTip(0, 間違った名前Html, 間違ったタイプ名);
$("#ログインフォーム入力");無効', false);
$('.remember').bind('click', function () { checkClick(); });
$(".btn-master").removeClass("可視性");
}
})
}
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 (); });
//ログインチェックボックスとラベルのクリックのバインディングを記憶します。
if ($.browser.msie && $.browser.version == "6.0") {
//Microsoft による ie6 の廃止に協力します
if ($.cookie('masterShow') != "hidden")
$('body').append('< div class="m-close m-close-short">閉じる
$(".master").lay(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('ユーザー名');
var ckpwd = $.cookie("パスワード");
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") ,"",{ 有効期限: 1, パス: '/' })
}
else{
$("#passwd").val(ckpwd); //ユーザーパスワード
$( ".btn-submit") .trigger('click'); //自動ログイン
}
}
else {
$('#remember-long').val("0" )
$(' #remember-long').attr('checked', false);
}
}
var logout = $.cookie("logout");/ /ユーザーが内部からのものであるかどうかを判断する Exit
rememberPassword(logout)
$(document).bind('keydown', 'return', function () { $(".btn-submit") ).trigger('click') ; });
})
ページに関係するバックグラウンド プログラムに関しては、ページ レベルの aspx を使用しましたが、もちろん、ashx を使用することもできます。それを処理してください。このバックグラウンド処理は、パスワードが正しいかどうかを検証し、ユーザーが正しくログインしている場合はセッション値を設定します。必要に応じて、バックグラウンドで定数を定義して検証の判断を行うことができます:
コードをコピー
Hashtable ht = new Hashtable();
string uname = Request.Params["user_name"];
string pwd = Request.Params["user_pwd"]; 0;
int lowerTypePwd = 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 (間違ったタイプ名 > 0 || 間違ったタイプPwd > 0)
{
ht.Add("間違ったタイプ名", 間違ったタイプ名);
ht.Add("間違ったタイプPwd", 間違ったタイプPwd); 🎜>Response.Write(CreateJsonParams(ht));
}
Response.End();
}
ハッシュテーブルを json に変換します:
foreach (項目内の DictionaryEntry 項目)
{
returnStr = """ item.Key.ToString() "":"" item.Value.ToString() ""," ;
}
return "{" returnStr.Substring(0, returnStr.Length - 1) "}";
}

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











科学技術の継続的な発展に伴い、通信機器に対する人々の要求も常に高まっています。市場では、Vivox100s と X100 の 2 つの携帯電話ブランドが大きな注目を集めています。それらはすべて独自の特徴を持ち、それぞれに独自の利点があります。この記事では、消費者がこれら 2 つの携帯電話をよりよく理解できるように、これら 2 つの携帯電話のユーザー エクスペリエンスの違いを比較します。 Vivox100s と X100 では、外観デザインに明らかな違いがあります。 Vivox100sはファッショナブルでシンプルなデザインスタイルを採用し、薄くて軽いボディと快適な手触りを備えていますが、X100は実用性を重視しています。

Android スマートフォンのカメラ機能について議論すると、ほとんどのユーザーは肯定的なフィードバックを返し、Apple スマートフォンと比較して Android スマートフォンのカメラ性能が優れていると一般的に信じています。この見解には根拠がないわけではなく、実際的な理由は明らかです。ハイエンドの Android スマートフォンは、ハードウェア構成、特にカメラ センサーの点で大きな競争上の優位性を持っています。多くのハイエンド Android スマートフォンは、最新の最高級カメラ センサーを使用しており、ピクセル数、絞りサイズ、光学ズーム機能の点で、同時期にリリースされた iPhone よりも優れていることがよくあります。この利点により、Android スマートフォンは写真撮影やビデオ録画時に高品質の画像効果を提供することができ、写真やビデオ撮影に対するユーザーのニーズに応えます。したがって、ハードウェア構成の競争力が Android スマートフォンの魅力となっています。

CNMOは3月31日、Xiaomi AutoモバイルアプリケーションがApple App Storeの無料アプリケーションランキングでトップになったことに気づいた。 Xiaomi Auto の公式アプリは、その包括的な機能と優れたユーザー エクスペリエンスで大多数のユーザーの支持を得て、すぐにリストの 1 位にランクインしたと報告されています。この待望のXiaomi Auto Appは、オンラインでの自動車購入プロセスのシームレスな接続を実現するだけでなく、遠隔車両制御サービスも統合しており、ユーザーは家から出ることなく車両状態の照会や遠隔操作などの一連のインテリジェントな操作を完了できます。特にXiaomi Motors SU7の新モデルが発売される際には同時にアプリも起動され、ユーザーはアプリを通じてSU7の構成内容を直観的に理解し、予約注文を完了することができます。 Xiaomi Auto アプリの内部設計

Vue のサーバー側通信プロセスの分析: ユーザー エクスペリエンスを向上させる方法 はじめに: インターネットの急速な発展に伴い、クライアントとサーバー間の通信がますます重要になってきています。最新の JavaScript フレームワークとして、Vue はサーバー側通信を実装するための豊富なツールとテクノロジーを開発者に提供します。この記事では、Vue のサーバー側通信プロセスを詳しく掘り下げ、ユーザー エクスペリエンスを向上させるためのヒントとベスト プラクティスを紹介します。 1. Vue サーバー側通信プロセスの概要 Vue のサーバー側通信プロセスには、次の主要な手順が含まれます

ユーザーエクスペリエンスの 5 つの要素: 1. ユーザーのニーズ、ユーザーやオペレーターがこの製品から得たいもの、2. 機能の範囲、この製品がどのような機能を備えているか、3. プロセス設計、大きく 2 つのカテゴリに分けられます: インタラクションデザインと情報アーキテクチャのパートでは、インタラクション デザインは「可能なユーザーの行動」を記述し、情報アーキテクチャはユーザーに情報を表現する方法に焦点を当てます。 4. プロトタイピング デザイン、セクションやボタンなどのインタラクティブ要素を画面上のどこに配置するかを決定しますページ; 5. 知覚デザイン、コンテンツ、機能性、美学を組み合わせて、他のレベルのすべての目的を満たす最終的なデザインを作成することです。

7 月 26 日から 7 月 29 日まで、毎年恒例の ChinaJoy2024 が上海新国際博覧センターで盛大に開催されます。ViewSonic は ZOL 中関村オンラインと協力して、ユーザーとゲーム愛好家のための視覚、聴覚、触覚を完全にカバーします。祝宴。 ZOL 中関村オンラインは、全国をカバーする IT インタラクティブ ポータルであり、製品データ、専門情報、技術ビデオ、インタラクティブ マーケティングを統合した複合メディアです。中関村オンラインは次元の壁を打ち破り、「トレンディ&ファン」をテーマにチャイナジョイのホールE7のブースS101に登場し、世界中の観客や業界関係者に多様で没入型の展示体験をもたらしました。 ViewSonic 展示エリア: ハイエンド ディスプレイ テクノロジーを探索 1

iQOOは、ゲーマー向けの高性能スマートフォンの開発に注力しているブランドで、近年ではiQOO Neoシリーズをはじめ、数々の好評製品を世に送り出しています。この記事では、読者が自分に適した携帯電話を選択する方法を理解できるように、2 つの携帯電話 iQOONeo8 と iQOONeo9 を比較します。まずはiQOO Neo8から見ていきましょう。この携帯電話には、強力なパフォーマンスとスムーズなユーザー エクスペリエンスを備えた Qualcomm Snapdragon 865 プロセッサが搭載されています。マッチ

3月21日、CNMOは、DXOMARKが発表したHuawei Mate60Proのスクリーンテスト結果が143ポイントで、世界のスクリーンランキングの真ん中にランクされたことに気づきました。 DXOMARK のレビューによると、デバイスの画面は快適なユーザー エクスペリエンスを提供します。前世代の Huawei Mate50Pro と比較して、最新バージョンの画面ではモーションとタッチの応答、アーティファクト管理が大幅に改善されており、ユーザーはより優れた視覚体験を楽しむことができます。画面の可読性は基本的に前世代製品のレベルを維持しており、低照度環境での明るさは若干不足しますが、ほとんどの周囲光条件下で良好な可読性と正確な演色性を備えています。特に屋外での視認性は非常に良く、画面の明るさは最高に達します。
