我想创建多个用户来输入网站(没有数据库)。
假设我在PHP中使用password_hash
生成了用户和密码组合。 (方法找到here。)
$userhash = password_hash('exampleusername', PASSWORD_BCRYPT, $useroptions);
$passhash = password_hash('examplepass', PASSWORD_BCRYPT, $pwoptions);
然后我在某处保存了哈希文件。
$hasheduser = file_get_contents("private/user");
$hashedpass = file_get_contents("private/pass");
根据表单中$_POST
的哈希值设置用户名和密码组合。
$userhash = password_hash($_POST['user'], PASSWORD_BCRYPT, $useroptions);
$passhash = password_hash($_POST['pass'], PASSWORD_BCRYPT, $pwoptions);
现在,如果用户/通行证组合正确,则会设置并检查会话。
if (
(password_verify($_POST['user'], $hasheduser))
&& (password_verify($_POST['pass'], $hashedpass))
) {
session_start();
$_SESSION['validuser'] = $_POST['user'];
}
我的问题是,如何在不经常复制相同代码的情况下创建多个用户名和密码?
让多个用户......
$hasheduser = file_get_contents("private/user");
$hashedpass = file_get_contents("private/pass");
$hasheduser2 = file_get_contents("private/user2");
$hashedpass2 = file_get_contents("private/pass2");
检查多个用户......
if (
(password_verify($_POST['user'], $hasheduser))
&& (password_verify($_POST['pass'], $hashedpass))
) elseif (
(password_verify($_POST['user'], $hasheduser2))
&& (password_verify($_POST['pass'], $hashedpass2))
)
有没有办法循环用户进入登录屏幕而不是多个elseif
语句?
任何帮助表示感谢。
我想也许我需要将用户/传递组合放在一个数组中...(我的错误尝试)。
$users = array(
file_get_contents("private/user1") => file_get_contents("private/pass1"),
file_get_contents("private/user2") => file_get_contents("private/pass2")
);
foreach ($users as $key => $value) {
if ((password_verify($username, $key)) && (password_verify($pass,$value))) {}
}
但这只会无休止地复制登录表单。
谢谢,任何帮助表示赞赏。
答案 0 :(得分:1)
您可以将单个文件与用户一起传递,例如(您可以拥有JSON文件或其他内容):
$usersInfo = array(
"userhash1" => "passwordhash1"
"userhash2" => "passwordhash2",
);
然后
if(isset($usersInfo[$userhash]) && $usersInfo[$userhash] === $passhash)
{
//Successful login
session_start();
$_SESSION['validuser'] = $_POST['user'];
}
答案 1 :(得分:0)
Tania Rascia,只需做一件事,即所有用户名和密码都存储在csv文件中,并且每次登录时都可以检查输入的用户名和密码。密码确实存在于文件中。身份验证成功后,您可以设置会话。这种方法可以解决您的问题。