PHP setcookie работает, но не во всех каталогах - PullRequest
0 голосов
/ 11 мая 2019

Я внедряю систему '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'];
        }
    }

}

Кто-нибудь знает, что в мире я сделал неправильно?

...