Я внедряю систему 'remmeber me' в PHP, устанавливая cookie, чтобы держать пользователя вошедшим в систему. Вот фрагмент моего кода входа в систему:
if(password_verify(trim($_POST['password']), $hash) == false) {
$incorrect_err = true;
} else {
// Excellent! All good
$_SESSION['signed_in'] = true;
$_SESSION['id'] = $id;
$_SESSION['username'] = $username;
$_SESSION['first_name'] = $first_name;
$_SESSION['last_name'] = $last_name;
$_SESSION['email'] = $email;
$_SESSION['hash'] = $hash;
$_SESSION['profile_picture'] = $profile_picture;
// Update 'last activity' in database
$sql = 'UPDATE `users` SET `last_activity` = CURRENT_TIMESTAMP, `times_signed_in` = `times_signed_in` + 1 WHERE `id` = ' . strval($_SESSION['id']);
mysqli_query($conn, $sql);
//Set cookie if necessary
if(!empty($_POST['keep-me-signed-in-input'])) {
$days = 30;
$value = $_SESSION['hash'];
setcookie("rememberme",$value,time()+ ($days * 24 * 60 * 60), '/');
}
// Go to correct page
if(!empty($_SESSION['destination'])) {
$location = 'location: ' . $_SESSION['destination'];
header($location);
} else {
header('location: dashboard');
}
}
Однако теперь, когдаЯ вхожу в систему, я не перехожу на страницу панели инструментов, как ожидалось.Кроме того, кажется, что файл cookie может быть прочитан только страницами в том же каталоге (pages / users /), что и страница входа, даже если я поставил «/» в своем выражении setcookie.
Вот какмой main.php (включается в начале каждой загрузки страницы) выглядит так:
if(!($_SESSION['signed_in'] == true)) { // User is logged out
if(isset($_COOKIE['rememberme']) && $sign_in_from_cookie !== false) {
$hash = $_COOKIE['rememberme'];
$sql = 'SELECT * FROM `users` WHERE `id` = "' . $hash . '"';
if($result = mysqli_query($conn, $sql)) {
$row = mysqli_fetch_assoc($result);
$_SESSION['email'] = $row['email'];
$_SESSION['first_name'] = $row['first_name'];
$_SESSION['last_name'] = $row['last_name'];
$_SESSION['signed_in'] = true;
$_SESSION['hash'] = $hash;
$_SESSION['username'] = $row['username'];
$_SESSION['profile_picture'] = $row['profile_picture'];
$_SESSION['id'] = $row['id'];
}
}
}
Кто-нибудь знает, что в мире я сделал неправильно?