我想要一个没有数据库的硬编码登录页面( login.html )。 如果某人填写了正确的用户名和密码,则会重定向到( page2.html )。
现在我的问题是,如果一个人直接为page2.html写了URL,他就可以访问它而无需登录。
理想案例 => www.example.com/login.html =>如果正确=> www.example.com/page2.html
问题案例 => www.example.com/page2.html => page2.html,NO LogIN :(
答案 0 :(得分:2)
你可以通过这样的php会话来控制所有这些
//set the session on the login page
$_SESSION['loggedIn'] = true;
//on the second page you check if that session is true, else redirect to the login page
if($_SESSION['loggedIn'])
//allow
else
//redirect to the login page
header('Location: /login.html');
session是一种存储要在多个页面中使用的信息(在变量中)的方法。默认情况下,会话变量会持续到用户关闭浏览器为止。
为简单起见,您可以将网页更改为php
(例如login.php
)。
第1行:在login.php
页面中,您将首先检查用户名和密码是否正确,如果是,请设置$_SESSION['loggedIn'] = true
第2行:在第二页(page2.php
)中,您将首先检查用户是否通过检查会话是否具有值if($_SESSION['loggedIn']) {//allow processing}
来登录
else { header('Location:/login.php');}
答案 1 :(得分:2)
首先,我不知道您如何将密码和用户名与某些内容进行比较,并检查其是否正确,但是现在我会做类似的事情(同样,这没有数据库)。 / p>
您有2个选择:使用如上所述的会话,或者使用更简单的方法:只需使用isset()
函数。
<form action="page2.php" method="POST">
<input type="text" name="userName" required>
<input type="password" name="password" required>
<button type="submit" name="submit">Send!</button>
</form>
page2.php将包含以下代码:
if(!isset($_POST['submit']) {
//direct back to a certain page, could look like this:
header('Location: xxx.php');
exit();
//exit() prevents the code from running, it litterly EXITS the code as soon as it hits that line.
} else {
//direct to page2.php
}
让我们分解一下:为什么我使用扩展名.php
?因为您不能仅使用HTML来做到这一点。
为什么我使用(!isset())
而不是isset()
?因为一种好的习惯是首先考虑安全性,所以您不必进入重要区域,然后检查某人是否具有致命武器。您先检查一下,然后再允许他进入或访问denie。这是一种非常简单且通用的方法,可以防止某人使用URL访问您的页面,但是SESSION更好,而且经验更丰富。
答案 2 :(得分:1)
使用纯HTML解决方案无法解决此问题。你的问题被标记为php,所以我的答案基于:
另一种选择是使用HTTP身份验证,请参阅this article获取教程。
答案 3 :(得分:1)
您可以在服务器安全设置中阻止该页面从外部位置访问,
然后在php中使用fil_get_contents('page2.htm')
成功登录后,将该页面的html发送到浏览器。 php在服务器上运行,因此文件请求不会来自外部源。你可以使用javascript覆盖页面上的html,或者你可以echo
php中if
上的内容显示else
上的正常页面
例如
if(isset($_GET['Login'])
{
//check login details
//if(....) //put your login check logic here
{
echo file_get_contents('page2.html');
}
else
{
//normal page's code goes here
}
}
注意:如何设置文件以禁止外部访问超出了我的答案范围
答案 4 :(得分:0)
使用login.php的完整路径更改网站的默认路径。下次当任何用户输入您的网址时,他们将被重定向到给定路径,即您的路径&gt; login.php
希望它会有所帮助。
答案 5 :(得分:0)
如果您使用的是Asp.net,也许您可以使用TempData。他们留在页面之间的会话。
if (/*username and password are correct*/){
TempData["LoggedIn"] = "True";
} else {
TempData["LoggedIn"] = "False";
}
然后,当您的控制器尝试加载page2时,您只需检查TempData的值。
var validate = TempData.Peek("LoggedIn");
if (validate == null || validate.ToString() == "False"){
return RedirectToAction("login");
} else {
/*allow access to page*/
}
使用.Peek保留TempData,因为如果访问它,通常会将其标记为删除。您还希望将其检查为null,因为如果用户没有首先浏览登录页面,则可能从未分配过它。
答案 6 :(得分:0)
我有同样的问题,发现了这个并且它完美地工作:(在javascript中) 只需将其放在文档的顶部即可。
[^ing]
答案 7 :(得分:0)
您可以通过检查用户是否已登录来防止这种情况发生
// If the user is not logged in redirect to the login page...
if (!isset($_SESSION['loggedin'])) {
header('Location: login.php'); //here you put your login page
exit;
}