Я столкнулся с проблемой, когда cookie устанавливается в одном методе класса, а другим способом тот же файл cookie не определен. Чтобы сделать это более понятным, вот код первого метода:
public function checklogpass($name,$psw)
{
try {
$pdo = new PDO('mysql:host=localhost;dbname=informal','vad','6989');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMES "utf8"');
}
catch(PDOException $e) {
echo $e->getMessage();
}
$sql = 'SELECT login,password FROM users WHERE login = :name AND password = :psw';
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':name',$name);
$stmt->bindValue(':psw',$psw);
$stmt->execute();
$row = $stmt->fetch();
if (isset($name) && isset($psw)) {
if($name == $row['login'] && $psw == $row['password']) {
setcookie("log",$name,time()+3600);
header('Location: /OpenS/app/auth/checkin.php');
} else {
$_SESSION['errors'] = 'Failed login or password';
header('Location: /OpenS/app/views/form.php');
}
}
}
И этот другой метод другого класса:
public function getUser()
{
if (isset($_COOKIE["log"])){
return $_COOKIE["log"];
header('Location: /OpenS/app/views/home.php');
} else {
$_SESSION['notify'] = 'You are not logged in';
header('Location: /OpenS/app/views/home.php');
}
}
Когда я ввожу неправильное имя пользователя или пароль, скрипт корректно сообщает мне "Ошибка входа или пароль". Однако, когда я ввожу правильное имя пользователя и пароль, cookie настроен, происходит перенаправление на главную страницу, но на главной странице он скажет: "Вы не вошли в систему".
Я решил эту проблему, поставив информацию на сессии, но я не думаю, что это правильное решение. Как я могу сделать это лучше?
Ваш нынешний подход в корне неверен. Установив файл cookie "cookie" со значением, равным имени пользователя, вы открываете себя для всех, кто регистрируется, как кому угодно... без каких-либо учетных данных для входа...
Файл cookie - это часть данных, которая хранится на клиентском компьютере. Все данные, которые находятся на клиентском компьютере, могут быть изменены по своему усмотрению. Они могут, среди прочего, просто изменить значение файла cookie и войти в систему как администратор, например.
Итак, как вы решаете эту проблему? Вы помещаете информацию в сеанс, как и вы. Файл cookie сеанса достаточно безопасен, так как трудно найти значение cookie, которое сталкивается с сеансом другого пользователя. Переменные сеанса никогда не отправляются пользователю и вместо этого сохраняются на сервере. Только cookie сеанса отправляется туда и обратно между браузером и клиентом.