@danchiksux
Говнокодер

Как правильно сохранять сессию в куки?

Сейчас у меня при авторизации создаётся сессия которая равна ID пользователя, потом я вывожу данные пользователя в его лично кабинете через этот id. Но ещё во время авторизации создаётся куки которые тоже равный id пользователя.
Если при заходе на сайт существует сессия то всё ок продолжаем работу на сайте, если нет проверяем куки если они есть то создаём сессию равную кукам(там ид).
Правильно ли это?
  • Вопрос задан
  • 2243 просмотра
Решения вопроса 1
serginhold
@serginhold
Ты положил болт на безопасность, сделав авторизацию по куке которая равна id пользователя.
Я допустим захожу на твой сайт, захожу в настройки браузера и ставлю твою куку, допустим id=1, и так я зашёл под админом на твой сайт, или просто под каким-то другим пользователем. Вопрос только в подборе id.

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

Ввел юзер логин/пароль, если все ок, создаёшь какую-то белеберду, типа
token = md5(salt . rand() . id) // эта часть твоя фантазия :)
сохраняешь ее и в куку пользователя, и в базу.
Когда пользователь заходит на сайт, берешь эту куку и сверяешь со значение в базе для этого пользователя. Всё.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Неправильно.
Лучше не играйтесь с безопасностью, если не понимаете как это работает. Используйте стандартный sessionid, и ничего больше в куки не нужно писать.

php.net/manual/ru/session.examples.basic.php
Ответ написан
@danchiksux Автор вопроса
Говнокодер
Сделал вот такую авторизацию:
<?php 
require '../libs/bd.php';
require '../libs/session.php';
$date = $_POST;
$errors = [];
if (isset($date['log_b'])) {
	if ($date['login'] == "") {
		$errors[] = 'Ошибка: Вы не ввели логин!';
	} else {
		$p_login = $date['login'];
		$ack = mysqli_query($connection, "SELECT * FROM `users` WHERE email = '$p_login'");
		$user = mysqli_fetch_assoc($ack);
	}
	if ($date['pass'] == "") {
		$errors[] = 'Ошибка: Вы не ввели пароль!';
	} else {
		$passh = password_verify($date['pass'], $user['password']);
	}

	if ($passh == false) {
		$errors[] = 'Ошибка: Вы ввели не верный логин или пароль!';
	}

	function generatePassword($length = 8){
  $chars = 'abdefhiknrstyzABDEFGHKNQRSTYZ23456789';
  $numChars = strlen($chars);
  $string = '';
  for ($i = 0; $i < $length; $i++) {
    $string .= substr($chars, rand(1, $numChars) - 1, 1);
  }
  return $string;
}

	if (empty($errors)) {
		$uuid = password_hash(generatePassword(8), PASSWORD_DEFAULT);
		setcookie("Auth", $uuid, time()+60*60*24*365*100 , "/");
		mysqli_query($connection, "UPDATE `users` SET `uuid`='$uuid'");
		$id = $user['id'];
		$_SESSION['Auth'] = $id;
		echo "Успешно";
	} else {
		echo array_shift($errors);
	}
}
?>
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы