В качестве заголовка я задаю этот вопрос, потому что единственный способ узнать, вошел ли пользователь в систему, состоит в том, чтобы в верхней части каждого файла был сеанс и запрос к базе данных для сравнения значения сеансов.
У меня есть что-то вроде этой функции, затем я вызываю эту функцию поверх каждого php-файла, это прекрасно работает. Однако я не думаю, что такой подход есть у большого веб-сайта, такого как Facebook, YouTube и т. Д. Это также означает, что все мои файлы должны быть .php
, у меня не может быть .html
, так как я не смогу работать функция ниже.
public function isSessionValid()
{
session_start();
$dbConfig = new dbconfig("users");
$dbUser = $dbConfig->getDbUser();
$getUser = new GetUser($dbUser);
$result = $getUser->getUser($_SESSION['UN'],$_SESSION['PW'] );
if(!count($result) > 0){
header("Location: ../index.html");
}
}
Мой вопрос: каковы другие эффективные способы проверки учетных данных пользователей?
2 ответа
Вы не хотите иметь что-то вроде:
$ _SESSION [ ' PW ']
Обычные текстовые незашифрованные пароли представляют собой серьезную проблему. Вы можете сделать что-то, где при входе в систему вы создаете токен доступа, который представляет собой случайную хеш-строку и которая сохраняется в файлах cookie пользователей.
Вот пример:
function login()
{
$userName = 'billy';
$password = 'foobar';
// get your user data using username and password.
$userObject = new User();
$userId = $userObject->id;
// create our secure hash.
$accessToken = password_hash($password, PASSWORD_DEFAULT);
// update the user in the row.
mysqli_query($link, "UPDATE users set access_token='$accessToken' WHERE id = $userId");
// expires in 1 day, auto logout.
setcookie('userAccessToken', $accessToken, time() + 86400);
}
function getUser() {
return mysqli_query($link, "SELECT * from users WHERE access_token = ".$_COOKIE['userAccessToken']);
}
Теперь вам нужно проверить только один атрибут, который является токеном доступа и хранится в файлах cookie на случай, если они вернутся. Использование хеш-подхода предотвращает прослушивание куки-файлов и получение личной информации.
Для удобства сопровождения кода вы не хотите дублировать код и всегда должны стараться создавать небольшие повторно используемые компоненты, которые можно использовать на всех ваших страницах. Создайте файл PHP с именем auth.php, а затем просто укажите его на тех страницах, где он вам нужен.
// UserPage.php
require_once __DIR__.'/lib/auth.php';
$user = getUser();
// MessagePage.php
require_once __DIR__.'/lib/auth.php';
$user = getUser();
// lib/auth.php
function getUser() {
return mysqli_query($link, "SELECT * from users WHERE access_token = ".$_COOKIE['userAccessToken']);
}
В качестве дополнительного примечания, вместо того, чтобы писать свое приложение на простом php и создавать собственную платформу, я рекомендую вам оформить заказ laravel.com. , У них есть видеоуроки, а фреймворк решает множество общих проблем, с которыми сталкиваются разработчики, включая эту.
Одним из решений будет настройка веб-сервера на автоматическую маршрутизацию всех запросов сначала через isSessionValid()
, а затем к их фактическому месту назначения.
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.