Как вы пишете код для получения идентификатора / пароля из CSV и процесса входа в систему? - PullRequest
1 голос
/ 18 июня 2009

Я подумал, что должен один раз использовать JSON для формата хранения идентификаторов / пропусков, но я об этом забронировал, затем я наконец обнаружил, что JSON слишком сложен для меня, поэтому сейчас Я планирую использовать CSV .

Файл CSV будет выглядеть следующим образом. Имя файла id.csv.

aaa_id,aaa_pass
bbb_id,bbb_pass
ccc_id,ccc_pass

Левый столбец - это идентификатор, а правый столбец - пароль, и каждая информация разделена запятыми. Форма входа: login.php . Это мой пример для login.php.

<form method="post" action="login-process.php">
id <input type="text" name="id" size="20"><br>
pass <input type="text" name="pass" size="20"><br>
<input type="submit" value="login">
</form>

А теперь мне нужно написать login-process.php

<?php

error_reporting(0);

$handle = fopen("id.csv", "r");
while (($data = fgetcsv($handle)) !== FALSE) {
    print $data['0'];
    print "=>";
    print $data['1'];
    print "<br>";
}
?> 

Когда я выполняю этот сценарий, он отображается как:

aaa_id=>aaa_pass
bbb_id=>bbb_pass
ccc_id=>ccc_pass

Я чувствую, что приближаюсь к конечной цели, но мне нужно написать код для аутентификации.

Как мне улучшить этот код?

Ответы [ 2 ]

2 голосов
/ 18 июня 2009

Во-первых, я согласен с тем, что говорит Паоло, это определенно неправильный подход. В дополнение к тому, что он сказал:

  • Процесс входа будет медленнее и медленнее, так как у вас есть больше пользователей в файл (это, вероятно, будет в некоторой степени верно для любой системы, но я думаю, что это будет важно здесь)
  • Внесение изменений в середине файл будет полной болью
  • Наличие несколько сценариев пытаются запись в файл одновременно будет вероятно, приведет к повреждению / отсутствию данные

Однако, если бы у вас была форма с полями «username» и «password», вы можете обработать ее, как показано ниже. Я спорю, должен ли я удалить код, чтобы избежать риска того, что люди действительно напишут что-то подобное.

<?php

$username = trim($_POST['username']);
$password = trim($_POST['password']);

if (!strlen($username) || !strlen($password)) {
    die('Please enter a username and password');
}

$success = false;

$handle = fopen("test.csv", "r");

while (($data = fgetcsv($handle)) !== FALSE) {
    if ($data[0] == $username && $data[1] == $password) {
        $success = true;
        break;
    }
}

fclose($handle);

if ($success) {
    // they logged in ok
} else {
    // login failed
}

Вы, вероятно, захотите прочитать об использовании Sessions , чтобы помнить, что пользователь вошел через несколько запросов страниц.

2 голосов
/ 18 июня 2009

Поскольку вы не охватили то, что я считаю удивительно очевидным вопросом, я должен задать его:

Почему вы не используете базу данных для этого? У PHP и MySQL прекрасные, прекрасные отношения, граничащие с оскорбительным игнорированием такой ситуации. Если у вас нет особенных обстоятельств, которые делают базы данных недоступными для вас - о которых я, честно говоря, не могу придумать, не стоит забывать о своей голове - вы должны пойти дальше и переключить свой код на использование баз данных. Они намного быстрее, намного легче и намного лучше. Однако для целей этого сайта учебник о том, как это сделать, будет довольно продолжительным. Вам следует рассмотреть вопрос о многих онлайн-уроках на эту тему или, возможно, купить книгу.

EDIT

Избегать баз данных, потому что вам нужно беспокоиться о SQL-инъекциях, это все равно, что вообще избегать создания веб-сайта, потому что вам нужно беспокоиться о XSS-атаках, или вообще избегать написания кода, потому что вы можете написать ошибку. Хотя SQL-инъекции являются популярными дырами в безопасности из-за множества наивных программистов, просто банально защитить себя от них, используя подготовленные операторы в MySQLi или PDO,

Как примечание: хранить пароли в виде простого текста - ужасная идея . Надлежащим способом сделать это является одностороннее шифрование пароля при вставке в базу данных, и всякий раз, когда вы хотите проверить, предоставил ли кто-то правильный пароль, вы шифруете этот пароль и сравниваете его с один в базе данных. Если вы этого не сделаете, вы просто напрашиваетесь на неприятности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...