Лучший способ сохранить данные объекта в php? - PullRequest
1 голос
/ 24 августа 2011

Я пытаюсь создать систему входа в систему в php. У меня есть 3 файла. index.php, login.class.php (определяет класс Login), securePage.php.

Класс входа в систему имеет различные функции, такие как getUserName (), addUser () и т. Д.

index.php создает новый объект $ login, имеет форму входа и создает новую форму учетной записи.

Когда вы создаете учетную запись на странице index.php, $ login-> addUser ($ username, $ password, $ first_name, $ last_name, $ email); выполняется функция, которая создает новую учетную запись.

После входа в систему и нажатия кнопки «Отправить» скрипт проверяет ваше имя пользователя / пароль / и т. Д. И перенаправляет вас на securePage.php.

После того, как я перенаправил на securePage.php из login.class.php, я не уверен, каков наилучший способ проверить, правильно ли пользователь вошел в систему и имеет ли вся информация пользователя под рукой.

Прямо сейчас мой securePage.php создает новый объект входа $ логин = новый логин; и проверяет, есть ли у пользователя доступ к странице, вызывая checkAccess в классе Login.

// Проверить, есть ли у пользователя доступ к этой странице, в противном случае перенаправить на страницу входа

if($login->checkAccess()) {
   //blah blah blah
}

Так выглядит функция checkAccess внутри класса входа в систему

public function checkAccess() {

    // check the session access
    if(isset($_SESSION['username']) ) {
        //
        return true;
    }

}

Мне кажется, это плохая реализация, потому что а) Я создаю новый объект входа и теряю свои данные б) Я только проверяю, является ли сеанс безопасным, проверяя, установлено ли имя пользователя сеанса, которое, вероятно, может быть подделано.

Каков наилучший способ реализации securePage.php с точки зрения сохранения всех пользовательских данных и проверки, вошел ли пользователь в систему?

Ответы [ 2 ]

0 голосов
/ 24 августа 2011

Данные сеанса являются данными на стороне сервера - их можно подделать только путем угадывания PHPSESSIONID (Вы можете прочитать об этом здесь ).

Способ, которым это обычно обрабатываетсяодин из двух способов.Если используется HTTP-аутентификация (что имеет некоторые важные преимущества, кстати, кстати), то, в основном, каждый раз, когда должна выполняться безопасная транзакция, необходимо проверять UN / PW.С другой стороны, если сервер хранит значение (скажем, в $_SESSION или в каком-либо другом эквивалентном фреймворке), то на сервере уже есть данные, и нет необходимости повторно запрашивать.

Если выправильно реализовав методы __sleep и __wakeup, вы можете просто сохранить весь объект входа в систему в $_SESSION, что, как правило, будет моим предпочтением.

0 голосов
/ 24 августа 2011

Ваш сеанс хранится на стороне сервера, и, таким образом, это хороший способ проверить состояние входа в систему.Существуют некоторые проблемы, такие как совместное использование учетной записи, но они не должны быть проблемой для разрабатываемого вами приложения.

Хотя я бы не проверял имя пользователя, я бы добавил ключ с именем «authorised»или что-то.также я бы вызвал функцию isAuthorised вместо checkAccess, поскольку checkAccess будет указывать на использование пользовательских ролей / прав для меня.

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