這是我在博客園的第一篇博客,也是我人生中的第一篇博客。希望它能夠記錄我的成長,幫助更多的人。 最近在寫我們社團的社團網站,有一個頁面不太希望普通訪客能訪問到,所以想做一個“統一身份驗證驗證”,但是又苦於社團網站搭建是純靜態站,沒法做資料庫,只能妥協,將賬號密碼字元串組寫到JavaScript腳本里, ...
這是我在博客園的第一篇博客,也是我人生中的第一篇博客。希望它能夠記錄我的成長,幫助更多的人。
最近在寫我們社團的社團網站,有一個頁面不太希望普通訪客能訪問到,所以想做一個“統一身份驗證驗證”,但是又苦於社團網站搭建是純靜態站,沒法做資料庫,只能妥協,將賬號密碼字元串組寫到JavaScript腳本里,最後再混淆加密。當然,現在我已經找到了更好的方法,可惜暫時沒有時間完成,我將在後文簡述思路,如有可能,我會另開一篇新方法實現過程。
思路如下:
1.首先建立一個遮罩層擋住你要驗證後才能看的內容
2.建立一個form表單,為其賦予name
3.然後在表單中添加input密碼賬號輸入框,同時分別建立id(password、account)
4.在提交按鈕上使用onclick綁定驗證函數
5.按下提交按鈕時,啟動驗證函數
6.驗證函數通過.account.value方式分別獲取用戶在input密碼賬號輸入框中輸入的內容
7.首先查詢賬號,如果賬號在account list中,獲取其在列表的位數
8.在password list中查詢同位數據,將其與讀取到的用戶輸入的密碼比較
9.如果正確,關閉遮罩層,顯示內容
.......
雖然我主要想分享實現思路,但是想了一下還是把完整的一些樣式給出來吧,畢竟我在學習借鑒的時候被很多只給代碼,樣式半保留,混亂的代碼折磨了很久......
具體實現如下:
CSS部分
/* 遮罩層,用於擋住內容 */
#overlayverify {
position: fixed;
left: 0px;
top: 0px;
height: 100%;
background-color: #cccccc;
z-index: 100
}
/* 模態框主體 */
.popup {
background-color: #ffffff;
height: 430px;
border-radius: 5px;
margin: 100px auto;
text-align: center
}
/* 模態框的標題 */
.popup_title {
height: 60px;
line-height: 60px;
border-bottom: solid 1px #cccccc
}
/* 模態框的內容 */
.popup_content {
text-align: left;
margin: 0 auto;
width: 90%;
height: 200px;
line-height: 45px;
padding: 10px 20px;
text-indent:2em
}
.popup_line{
margin: 0 auto;
height: 20px;
width: 85%;
border-bottom: 1px solid #dbdbdb
}
/* 模態框的按鈕欄 */
.popup_btn {
padding-top: 30px
}
/* 彈出框的按鈕 */
.popup_btn button.ds {
color: #778899;
width: 40%;
height: 40px;
cursor: pointer;
border: solid 1px #cccccc;
border-radius: 5px;
margin: 5px 10px;
color: #ffffff;
background-color: rgb(150,150,150)
}
.popup_btn button.ag {
color: #778899;
width: 40%;
height: 40px;
cursor: pointer;
border: solid 1px #cccccc;
border-radius: 5px;
margin: 5px 10px;
color: #ffffff;
background-color: #337ab7
}
HTML部分
<script src="https://new.hkems-stmo.top/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://new.hkems-stmo.top/css/bootstrap.min.css" />
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<!--調用需要的框架文件-->
<div class="container">
<div class="row">
<div id="overlayverify" style="display: block;">
<!--建立遮罩層擋住內容-->
<div class="col-sm-2 col-lg-4"></div>
<!--bootstarp框架,用於調節樣式-->
<div class="popup col-sm-8 col-lg-4">
<!--建立一個模態框-->
<p class="popup_title">統一身份驗證驗證</p>
<p class="popup_content overflow-auto" style="line-height: 40px;">歡迎訪問科技社規劃備忘錄,在進行瀏覽前,我們需要驗證你的身份。</p>
<!--說明-->
<form name="AandP" style="margin-top: -20%;">
<!--建立名為AandP的表單(Account and Password),容納用戶輸入進輸入框的內容-->
<input class="form-control signinput" id="account" placeholder="請輸入賬號:"
style="width: 80%;margin-left: 10%;margin-bottom: 15px;" />
<input class="form-control" id="password" type="password" placeholder="請輸入密碼"
style="width: 80%;margin-left: 10%;margin-bottom: 10px;" />
<!--分別設置了賬號密碼的輸入框,各自用id="xxx"來標識-->
</form>
<div id="out" style="color: red;"></div>
<!--建立一個id為out的輸出反饋的div,登陸失敗等信息被寫入到這-->
<div class="popup_line"></div>
<div class="popup_btn" style="margin-top: -20px;">
<button class="cancelBtn ds overflow-hidden" onclick="dontknow()">我不知道密碼</button>
<button class="confirmBtn ag overflow-hidden" onclick="verify()">驗證並訪問</button>
<!--用onclick綁定函數,點擊按鈕運行onclick指定的函數-->
</div>
</div>
<div class="col-sm-2 col-lg-4"></div>
<!--bootstarp框架,用於調節樣式-->
</div>
</div>
</div>
<div>
<!--在這裡寫入你想在通過驗證之後展示的內容-->
</div>
Javascript部分
var testV = 3;
/*定義最高嘗試次數*/
var error = 0;
/*定義初始錯誤量*/
var accountlist = ['賬戶1', '賬戶2', '賬戶3', '賬戶4'];
var passwordlist = ['密碼1', '密碼2', '密碼3', '密碼4'];
/*定義賬號密碼列表*/
function verify() {
/*用戶提交驗證*/
var account = AandP.account.value;
var password = AandP.password.value;
/*從AandP表單里獲取用戶輸入的賬號密碼,為相應的變數名賦值*/
if(testV > 1){
/*如果嘗試機會>1*/
if(accountlist.indexOf(account) == -1){
/*則使用accountlist.indexOf(account)方法獲得輸入的用戶名在用戶列表的位數,用if語句判斷如果等於-1(即不存在)*/
error += 1;
/*則使error變數+1*/
}
else{
/*如果不等於-1,即意味著用戶輸入的用戶名存在,就可以接著進行密碼的核驗*/
var Correspondingpassword = passwordlist[accountlist.indexOf(account)];
/*用 列表名[位數(通過accountlist.indexOf(account)獲得)] 方法查詢到用戶輸入的用戶名相對應的密碼,賦入Correspondingpassword變數*/
if(Correspondingpassword == password){
out.innerHTML = '賬號密碼正確,驗證通過';
}
/*將用戶輸入的密碼與查詢到與用戶輸入的用戶名相對應的密碼對比,如果成功則用innerHTML將提示輸出到id為out的塊組件*/
else{
error += 1;
}
/*如果不匹配,對error變數+1*/
}
if(error != 0){
/*驗證部分結束。如果error變數不等於零,即至少發生了賬號錯誤或賬號密碼不匹配中的一個事件:*/
testV -= 1
out.innerHTML = '賬號或密碼錯誤,你還剩'+ testV+ '次機會';
/*讓嘗試次數testV-1,然後用innerHTML將提示輸出到id為out的塊組件*/
}
else{
/*如果error變數等於零,則驗證成功*/
overlayverify.style.display = "none";
/*為擋住頁面的模態框寫入“display:none”的樣式,使其消失*/
}
}
else{
/*如果嘗試機會<1,即沒有嘗試機會了*/
out.innerHTML = '登陸凍結,請刷新或聯繫管理員';
/*用innerHTML將提示輸出到id為out的塊組件*/
}
document.getElementById("AandP").reset();
/*重置用戶輸入的數據*/
}
function dontknow() {
/*用戶不知道密碼*/
window.location.href = '其他頁面的url'
/*跳轉到其他頁面*/
}
JavaScript在錄入賬號密碼後可以進行混淆加密。
註意:!!!bootstarp框架應在合理位置放置,否則會發生錯誤!
完整示例
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="page-enter" content="revealTrans(duration=5.0,transition=20)">
<meta http-equiv="Cache-Control" content="no-siteapp" />
<title>身份驗證頁(頁面標題)</title>
<link rel="prefetch" href="/images/UI/logo-big.png">
<link rel="prefetch" href="/function/header.html">
<link rel="prefetch" href="/function/footer.html">
<meta name="keywords" content="關鍵詞,發佈於恍惚交錯落花雨的博客園,禁止CSDN轉載" />
<meta name="description" content="簡介" />
<meta name="revised" content="MQSI, 2023年9月25日" />
<meta name="author" content="MQSI, [email protected]">
<meta name="renderer" content="webkit">
<meta name="copyright" content="本示例網頁版權歸恍惚交錯落花雨所有,禁止CSDN轉載">
<!--以上標識頭可以不保留-->
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://new.hkems-stmo.top/css/bootstrap.min.css" />
<script src="https://new.hkems-stmo.top/js/bootstrap.bundle.min.js"></script>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<!--調用需要的框架文件-->
<style>
/* 遮罩層,用於擋住內容 */
#overlayverify {
position: fixed;
left: 0px;
top: 0px;
height: 100%;
background-color: #cccccc;
z-index: 100
}
/* 模態框主體 */
.popup {
background-color: #ffffff;
height: 430px;
border-radius: 5px;
margin: 100px auto;
text-align: center
}
/* 模態框的標題 */
.popup_title {
height: 60px;
line-height: 60px;
border-bottom: solid 1px #cccccc
}
/* 模態框的內容 */
.popup_content {
text-align: left;
margin: 0 auto;
width: 90%;
height: 200px;
line-height: 45px;
padding: 10px 20px;
text-indent: 2em
}
.popup_line {
margin: 0 auto;
height: 20px;
width: 85%;
border-bottom: 1px solid #dbdbdb
}
/* 模態框的按鈕欄 */
.popup_btn {
padding-top: 30px
}
/* 彈出框的按鈕 */
.popup_btn button.ds {
color: #778899;
width: 40%;
height: 40px;
cursor: pointer;
border: solid 1px #cccccc;
border-radius: 5px;
margin: 5px 10px;
color: #ffffff;
background-color: rgb(150, 150, 150)
}
.popup_btn button.ag {
color: #778899;
width: 40%;
height: 40px;
cursor: pointer;
border: solid 1px #cccccc;
border-radius: 5px;
margin: 5px 10px;
color: #ffffff;
background-color: #337ab7
}
</style>
<script>
var testV = 3;
/*定義最高嘗試次數*/
var error = 0;
/*定義初始錯誤量*/
var accountlist = ['賬戶1', '賬戶2', '賬戶3', '賬戶4'];
var passwordlist = ['密碼1', '密碼2', '密碼3', '密碼4'];
/*定義賬號密碼列表*/
function verify() {
/*用戶提交驗證*/
var account = AandP.account.value;
var password = AandP.password.value;
/*從AandP表單里獲取用戶輸入的賬號密碼,為相應的變數名賦值*/
if (testV > 1) {
/*如果嘗試機會>1*/
if (accountlist.indexOf(account) == -1) {
/*則使用accountlist.indexOf(account)方法獲得輸入的用戶名在用戶列表的位數,用if語句判斷如果等於-1(即不存在)*/
error += 1;
/*則使error變數+1*/
}
else {
/*如果不等於-1,即意味著用戶輸入的用戶名存在,就可以接著進行密碼的核驗*/
var Correspondingpassword = passwordlist[accountlist.indexOf(account)];
/*用 列表名[位數(通過accountlist.indexOf(account)獲得)] 方法查詢到用戶輸入的用戶名相對應的密碼,賦入Correspondingpassword變數*/
if (Correspondingpassword == password) {
out.innerHTML = '賬號密碼正確,驗證通過';
}
/*將用戶輸入的密碼與查詢到與用戶輸入的用戶名相對應的密碼對比,如果成功則用innerHTML將提示輸出到id為out的塊組件*/
else {
error += 1;
}
/*如果不匹配,對error變數+1*/
}
if (error != 0) {
/*驗證部分結束。如果error變數不等於零,即至少發生了賬號錯誤或賬號密碼不匹配中的一個事件:*/
testV -= 1
out.innerHTML = '賬號或密碼錯誤,你還剩' + testV + '次機會';
/*讓嘗試次數testV-1,然後用innerHTML將提示輸出到id為out的塊組件*/
}
else {
/*如果error變數等於零,則驗證成功*/
overlayverify.style.display = "none";
/*為擋住頁面的模態框寫入“display:none”的樣式,使其消失*/
}
}
else {
/*如果嘗試機會<1,即沒有嘗試機會了*/
out.innerHTML = '登陸凍結,請刷新或聯繫管理員';
/*用innerHTML將提示輸出到id為out的塊組件*/
}
document.getElementById("AandP").reset();
/*重置用戶輸入的數據*/
}
function dontknow() {
/*用戶不知道密碼*/
window.location.href = '其他頁面的url'
/*跳轉到其他頁面*/
}
</script>
</head>
<body>
<div class="container">
<div class="row">
<div id="overlayverify" style="display: block;">
<!--建立遮罩層擋住內容-->
<div class="col-sm-2 col-lg-4"></div>
<!--bootstarp框架,用於調節樣式-->
<div class="popup col-sm-8 col-lg-4">
<!--建立一個模態框-->
<p class="popup_title">統一身份驗證驗證</p>
<p class="popup_content overflow-auto" style="line-height: 40px;">歡迎訪問科技社規劃備忘錄,在進行瀏覽前,我們需要驗證你的身份。
</p>
<!--說明-->
<form name="AandP" style="margin-top: -20%;">
<!--建立名為AandP的表單(Account and Password),容納用戶輸入進輸入框的內容-->
<input class="form-control signinput" id="account" placeholder="請輸入賬號:"
style="width: 80%;margin-left: 10%;margin-bottom: 15px;" />
<input class="form-control" id="password" type="password" placeholder="請輸入密碼"
style="width: 80%;margin-left: 10%;margin-bottom: 10px;" />
<!--分別設置了賬號密碼的輸入框,各自用id="xxx"來標識-->
</form>
<div id="out" style="color: red;"></div>
<!--建立一個id為out的輸出反饋的div,登陸失敗等信息被寫入到這-->
<div class="popup_line"></div>
<div class="popup_btn" style="margin-top: -20px;">
<button class="cancelBtn ds overflow-hidden" onclick="dontknow()">我不知道密碼</button>
<button class="confirmBtn ag overflow-hidden" onclick="verify()">驗證並訪問</button>
<!--用onclick綁定函數,點擊按鈕運行onclick指定的函數-->
</div>
</div>
<div class="col-sm-2 col-lg-4"></div>
<!--bootstarp框架,用於調節樣式-->
</div>
</div>
</div>
<div>
<p>本示例網頁版權歸恍惚交錯落花雨所有,禁止CSDN轉載</p>
<!--在這裡寫入你想在通過驗證之後展示的內容-->
</div>
</body>
</html>
優點:好像沒什麼優點....
缺點:防防不懂技術的得了......懂技術的直接就把遮罩層刪了。
當然現在這段代碼可以改裝一下連上資料庫來查詢,這樣就會變得較為安全可靠。
希望這篇文章能幫到大家,也希望大家能指出我的不足之處。
本人自學野路子,文中部分用語不規範,求各位大佬輕噴。
轉載請取得同意並標明原作者。禁止轉載至CSDN。
恍惚交錯落花雨
2023年9月25日