@kado123

Как сделать запрет неавторизованным пользователям заходить на страницу?

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

Код regcheck.php:
<?php 

$login = filter_var(trim($_POST['userName']), FILTER_SANITIZE_FULL_SPECIAL_CHARS); // Удаляет все лишнее и записываем значение в переменную //$login
$pass = filter_var(trim($_POST['password']), FILTER_SANITIZE_FULL_SPECIAL_CHARS);

if(mb_strlen($login) < 5 || mb_strlen($login) > 90){
	echo "Недопустимая длина логина";
	exit();
}

$mysql = new mysqli('localhost', '***********', '*************', '***********');

$result1 = $mysql->query("SELECT * FROM `users` WHERE `login` = '$login'");
$user1 = $result1->fetch_assoc(); // Конвертируем в массив
if(!empty($user1)){
	echo "Данный логин уже используется!";
	exit();
}

else {
    $mysql->query("INSERT INTO `users` (`login`, `pass`)
	VALUES('$login', '$pass')");
    $mysql->close();
}


header('Location: /news.php');
exit();
 ?>


Код logincheck.php:

<?php 


$login = filter_var(trim($_POST['name']));
$pass = filter_var(trim($_POST['password']));


$mysql = new mysqli('localhost', '***********', '***********', '*************');


$result = $mysql->query("SELECT * FROM `users` WHERE `login` = '$login' AND `pass` = '$pass'");
$user = $result->fetch_assoc(); // Конвертируем в массив

if(count($user) == 0){
	echo "Такой пользователь не найден.";
	exit();
}
else if(count($user) == 1){
	echo "Логин или пароль введены неверно";
	exit();
}

setcookie('user', $user['name'], time() + 3600, "/");

$mysql->close();

header('Location: news.php');

 ?>
  • Вопрос задан
  • 432 просмотра
Пригласить эксперта
Ответы на вопрос 1
@v__V__v
Разработчик
1. Чтобы проверить, авторизован ли пользователь, вам нужно проверять наличие $_COOKIE['user'] в тех скриптах, которые отдают закрытые страницы. Если его нет, то отдаете либо редирект куда-нибудь, либо страницу 403.
2. В logincheck.php условие if(count($user) == 0) никогда не сработает, т.к. если пользователь не найден, то $mysql->query() вернет false, а вы получите ошибку "trying to get property of non-object" при вызове $result->fetch_assoc(). Чтобы этого не происходило, нужно использовать if($result) для проверки наличия такого пользователя.
3. Условие if(count($user) == 1) сработает, внезапно, тогда, когда у вас пользователь найден. В результате вы его ни за что пошлете в пень.

Правильно должно быть примерно вот так:
if($result){
  // пользователь с таким логином и паролем есть, поехали
  $user = $result->fetch_assoc(); // Конвертируем в массив
  setcookie('user', $user['name'], time() + 3600, "/");
  $mysql->close();
  header('Location: news.php');
}else{
  // нет такого пользователя
  exit("Логин или пароль введены неверно");
}


ЗЫ
Хранить пароль в чистом виде - очень плохая идея, необходимо его хешировать, причем с солью.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы