我正在尝试为一个或两个用户创建一个非常简单的登录,用户名和密码存储在“admin.txt”中,文本文件的格式如下: 用户名 密码 __ 我似乎没有用户名和密码注册...感谢您的帮助!!
// username and password sent from form
$myusername=$_POST['username'];
$mypassword=$_POST['password'];
$sql = fopen("../admin8183/users/admin.txt", "r");
while (!feof($sql)) {
$myusername = fgets($sql);
$mypassword = fgets($sql);
$line = fgets($sql);
$myusername = trim($myusername);
$mypassword = trim($mypassword);
}
// counting rows
$admin=count(file("../admin8183/users/admin.txt"));
if($admin==1){
// Register $myusername, $mypassword and redirect to file "sendmessage.php"
session_register("myusername");
session_register("mypassword");
header("location:sendmessage.php");
}
else {
echo "Wrong Username or Password";
}
P.S。我确信我的代码有一些问题,并且有更有效的方法来实现我的目标,这是我第一次尝试在php中创建登录... 谢谢你的帮助!
答案 0 :(得分:2)
此脚本存在多个问题:
$admin=count(file("../admin8183/users/admin.txt")); ... if($admin==1)
只要密码文件只包含一行,就允许任何人访问。如果用户名/密码位于不同的行,则永远不会发生这种情况。更糟糕的是,此检查与用户输入无关。$_SESSION['logged_in']
的会话变量设置为true。session_register
已弃用。 构建安全的用户身份验证方案很难。正如其他人所说,尝试使用基本的Apache身份验证。这是一个不错的教程:
http://www.nexcess.net/support/tutorials/misc-tools/htaccess-authentication/
答案 1 :(得分:1)
首先,我必须说这是完成任务的错误方法,使用htpasswd的评论提议是非常正确的。
至于你的代码:
$myusername
和文件中读取时,您使用相同的$_POST
变量。您需要使用单独的变量并进行比较。<强>更新强>:
由于您无法使用htpasswd,我强烈建议您使用哈希密码。无论是将其保存在文件中还是硬编码,都是一种很好的做法。正如@silky指出的那样,sha1 / md5并不比纯文本好,所以这里是sha256 for PHP的实现。
另外,请不要在sezoion中保存您的密码/用户名,因为@ pygorex1指出,使用另一个变量将用户标记为已登录。
答案 2 :(得分:0)
好吧,看起来fgets()会得到一整行:http://php.net/manual/en/function.fgets.php
因此,您要将整行username password
放入$mysuername
,然后将下一行放入$mypassword
,依此类推。