我一直在 SO 和其他网站上搜索有关 PHP 会话的几个小时。这些信息非常好,广泛且有据可查,但这是我的问题,过于广泛且过于繁重。
我想实现尽可能最短和最简洁的代码,因为我不需要更多。
我在验证字段的 login.php 中启动会话:用户名和密码,它们存储在 MySQL DB 中。
如果它是正确的,我可以看到 home.php 和其他页面(到目前为止一切都很完美)。
现在事实证明,我有一个只有某些用户可以访问的“private.php”页面。
为此,我的表中有一个名为“access”的第三个字段,其唯一值是“yes”和“no”:
如何在登录时验证第三个字段?如果值为“yes”,我有权访问“private.php”,否则我无法登录。
这就是我所拥有的:
登录.PHP
<body>
<form action="validation.php" method="POST">
<fieldset>
<p><label for="email">Usuario</label></p>
<p><input type="text" name="login" id="email" required></p>
<p><label for="password">Contraseña</label></p>
<p><input type="password" name="password" id="password" required></p>
<br><br>
<p><input type="submit" name="Enviar" value="Ingresar"></p>
</fieldset>
</form>
</body>
验证.PHP
<body>
<?php
try {
$base=new PDO("mysql:host=localhost; dbname=PRUEBAS", "root", "");
$base->setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql="SELECT * FROM USUARIOS_PASS WHERE USUARIOS= :login AND PASSWORD= :password";
$resultado=$base->prepare($sql);
$login=htmlentities (addslashes($_POST["login"]));
$password=htmlentities (addslashes($_POST["password"]));
$resultado->bindValue(":login", $login);
$resultado->bindValue(":password", $password);
$resultado->execute();
$numero_registro=$resultado->rowCount();
if($numero_registro!=0) {
session_start ();
$_SESSION["usuario"]=$_POST["login"];
if (isset($_POST['url']) && strlen($_POST['url'])) {
// redirecciona a la url
header("location:".$_POST['url']);
}
// redirecciona al index x defecto
header("location:home.php");
} else {
echo "<script>
alert('Usuario o Contraseña incorrectos, por favor intente nuevamente.');
window.location= 'login.php'
</script>";
}
} catch (\Exception $e) {
die ("Error: " . $e->getMessage());
}
?>
</body>
这就是我在页面“home.php”(和其他)的标题中验证会话的方式。
<?php
session_start();
if (!isset($_SESSION["usuario"])){
header("Location:login.php");
}
?>
总结
我很抱歉,这个问题有点长。我需要阻止访问“private.php”页面。例如,我应该在我的validation.php中还是在我想要限制的页面的标题中验证我的表的“访问”字段?
编辑
我在问这个问题,如果我以布尔形式存储登录名,我可以实现它,将访问字段保留为 INT 形式的值 1 和 2。管理员的值为 2,所有其他人的值为 1。
原始 SO 网站上的这个问题非常相似,但我无法在我的代码中完全实现它。
尝试使用表的用户 ID 并使用 PHP 询问 MySQL 该用户是否有,将其设置为等于“是”,如果不相同,则重定向到 index.php 或您想要的任何地方尽快当它到达家时,我编辑答案添加示例代码,同样,如果你有一些 PHP 经验,你应该明白我在说什么,希望它对你有帮助,然后我再给你一个例子:)
编辑:
我想应该是这样的,我现在在我的手机上......如果有任何错误,我很抱歉,但我认为应该是这样的。