2017-08-12 175 views
-1

我有一個關於html/JavaScript/PHP的問題,我希望只能填寫正確的密碼才能查看幾頁,但我不希望您必須將密碼放在每個私人頁面上你訪問。你能密碼保護html頁面嗎?

例如:

頁:

  • 的login.html
  • PrivatePage1.html
  • PrivatePage2.html

現在你可以去:「WWW。 mywebsite.com/PrivatePage1.html',你不需要輸入密碼,那麼有沒有辦法檢查他們是否已經登錄了'Lo gin.hmtl」

我的代碼上 '的login.html'

https://hastebin.com/egehaboxig.js

password(); 

function password() { 
    var userPassword; 
    var myPassword = "a"; 

    userPassword = prompt("Enter the password:"); 

    if(userPassword == myPasswordfun) { 
     alert('Correct, press ok to enter the site.'); 
    }else if(userPassword == null) { 
     window.location ="http://www.google.com"; 
    }else { 
     alert('Incorrect'); 
     password(); 
    } 
} 

感謝您的閱讀!

+3

你明白,每個人都可以查看你的html頁面的源代碼並找出密碼,對吧? –

+0

你需要一個會話變量。 –

+1

這就像最低效的密碼保護一樣,因爲任何人都可以在源視圖中看到密碼。但是,可以使用JavaScript存儲和檢查Cookie。您可以將「logged_in」Cookie存儲一小時(或者您希望用戶保持登錄狀態的時間長),以實現您想要的效果。真正的保護必須在服務器端完成。進一步的參考:https://www.w3schools.com/js/js_cookies.asp – ProgrammingMachine5000

回答

1

我會避免在Javascript中使用localStorage,因爲任何人都可以在客戶端(在瀏覽器中)手動驗證自己。真正的安全密碼處理的唯一選擇是服務器端身份驗證。

PHP有一個內置變量$_SESSION來處理這個問題。首先,您必須使用session_start()命令在服務器上啓動會話。一旦用戶輸入密碼,您可以驗證它,然後設置$_SESSION['valid'] = TRUE。我們可以檢查用戶是否使用以下功能進行了驗證。

public function is_valid() { 
    //Returns true if session is valid, otherwise returns false. 
    if(isset($_SESSION['valid'])) { 
     return $_SESSION['valid']; 
    } 
    else { 
     return FALSE; 
    } 
} 

會話在用戶關閉瀏覽器窗口時結束。

密碼本身應該作爲散列存儲在數據庫中。這將阻止任何人,包括網站管理員直接訪問密碼。一旦密碼被散列,你可以散列用戶輸入並比較兩個散列。如果它們匹配,則知道它們輸入了正確的密碼。

+0

我認爲你不應該使用LocalStorage的第一個原因並不完全正確,但使用PHP $ _SESSION確實更安全 –

0

您需要將他們的成功登錄存儲在某個地方(可能是最安全的服務器)或可能位於客戶端(安全性較低)。

有幾種機制可以工作,但是,在客戶端上,localStorage是最簡單的。

成功登錄後,你將值設置到localStorage,像這樣:

localStorage.setItem("loggedIn", "true"); 

而且,要檢查記錄在每一頁上,你會寫:

if(localStorage.getItem("loggedIn") === "true"){ 
    // user is logged in 
} else { 
    // user is not logged in 
} 
+0

當然,如果客戶端不支持localStorage,這將不起作用... – junkfoodjunkie

+0

@junkfoodjunkie當然。如果關閉,任何客戶端機制也不會。 –

+0

是的 - 我只是覺得推薦localStorage作爲這種東西的唯一解決方案是......糟糕。人們應該努力教好解決方案。無論如何,這些解決方案都有效,但如果localStorage不被支持,它應該回退到其他地方,或者最好使用服務器端的東西。 – junkfoodjunkie