Я работаю над сеансом входа в систему на основе простого файла. Я изменяю это, чтобы требовать только MD5
пароль. Это текстовый файл, содержащий пользователей и пароли MD5
,
admin:5f4dcc3b5aa765d61d8327deb882cf99
user1:7c6a180b36896a0a8c02787eeafb0e4c
user2:6cb75f652a9b52798eb6cf2201057c73
И это часть моего PHP-кода.
/* Bool validateLogin() returns TRUE if login/password are valid. Returns FALSE and sets $this->errorMessage if invalid or other error. */
function validateLogin() {
$this->errorMessage = '';
$this->processLoginInput();
if($this->parseUserFile()) {
if( md5($_POST['password']) == $this->userData['password']) {
$_SESSION['loginId'] = $_POST['password'];
return(TRUE); }
else { $this->errorMessage = "Invalid user name and/or password"; }
}
else { $this->errorMessage = "Unable to read user login data file"; }
return(FALSE);
} // end validateLogin()
/* Mixed parseUserFile(). Returns number of users in userFile, else FALSE */
function parseUserFile() {
$this->userData = array();
if(is_readable($this->userFile)) {
$lines = file($this->userFile);
foreach($lines as $line) {
$line = trim($line);
if($line == "") { continue; }
$parts = preg_split('/:/', trim($line));
if(count($parts) >= 2) {
list($user, $password) = $parts;
$this->userData['password'] = $password; } } }
return((count($this->userData)) ? count($this->userData) : FALSE );
}// end parseUserFile()
МОЯ ПРОБЛЕМА: это дает мне доступ ТОЛЬКО с последним паролем в списке TXT.
Первый и второй пароли не будут работать.
Можете ли вы заметить ошибку в коде, ребята?
Я не очень много знаю PHP, но проблема возникает из-за вашего кода в parseUserFile
и заключается в том, что вы просматриваете содержимое файла и на каждой итерации, которую вы назначаете.
$this->userData['password'] = $password; }
Таким образом, в каждой итерации один и тот же элемент массива userData (то есть элемент с ключом «пароль») перезаписывается значением пароля в этой строке. Таким образом, после завершения цикла по всем элементам в файле, он содержит только значение последнего пароля.
Вместо этого вы должны сделать следующее:
//Pass in user name to fetch password for the user
function parseUserFile($userName) {
$this->userData = array();
if(is_readable($this->userFile)) {
$lines = file($this->userFile);
foreach($lines as $line) {
$line = trim($line);
if($line == "") { continue; }
$parts = preg_split('/:/', trim($line));
if(count($parts) >= 2) {
list($user, $password) = $parts;
//Get password for the user.
if($user == $userName)
$this->userData['password'] = $password; } } }
return((count($this->userData)) ? count($this->userData) : FALSE );
}// end parseUserFile()
Других решений пока нет …