2017-08-12 178 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