Как реализовать функцию запоминания меня с помощью php без перезаписи поведения сеанса

У меня проблема с использованием файлов cookie в моем тестовом проекте, я пытаюсь реализовать функцию Remember_me, которая удерживает пользователя в системе в течение 30 дней, если он нажал кнопку «Запомнить меня» при входе в систему, и для автоматического выхода из системы, когда браузер закрывается, если кнопка не была нажата во время входа в систему. В настоящее время я делаю (файл connect.php): проблема в том, что он в настоящее время сохраняет пользователя в системе независимо от того, нажал ли он кнопку «запомнить меня».

<?php
ini_set('session.cookie_lifetime', 3600 * 24 * 30);
session_start();

//Our MySQL user account.
define('MYSQL_USER', 'root');

//Our MySQL password.
define('MYSQL_PASSWORD', '');

//The server that MySQL is located on.
define('MYSQL_HOST', 'localhost');

//The name of our database.
define('MYSQL_DATABASE', 'qh_beer_shop');

/**
 * PDO options / configuration details.
 * I'm going to set the error mode to "Exceptions".
 * I'm also going to turn off emulated prepared statements.
 */
$pdoOptions = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false
);

/**
 * Connect to MySQL and instantiate the PDO object.
 */
$pdo = new PDO(
    "mysql:host = " . MYSQL_HOST . ";dbname = " . MYSQL_DATABASE, //DSN
    MYSQL_USER, //Username
    MYSQL_PASSWORD, //Password
     $pdoOptions //Options
);
$pdo->query('SET NAMES utf8');

И логин:

<?php
require_once 'connect.php';
if (isset($_SESSION['user'])) {
    header('Location: login.php');
    exit;
}
$error = '';

try {
//If the POST var "register" exists (our submit button), then we can
//assume that the user has submitted the registration form.
    if (isset($_POST['login'])) {

        $username = $_POST['username'];
        $password = $_POST['password'];

        //Retrieve the field values from our registration form.
        // $username = !empty($_POST['username']) ? trim($_POST['username']) : null;
        // $password = !empty($_POST['password']) ? trim($_POST['password']) : null;


//Construct the SQL statement and prepare it.
        $sql = "SELECT 
                id AS id,
                username AS username,
                password AS password,
                email AS email,
                phone AS phone,
                address AS address,
                first_name AS first_name,
                last_name AS last_name,
                age AS age             
            FROM
                users
            WHERE
                 username = ?
             ";
        $stmt = $pdo->prepare($sql);


        $stmt->execute([$username]);



        $user = $stmt->fetch(PDO::FETCH_ASSOC);


        $passwordHash = $user['password'];
        if (!password_verify($password, $passwordHash)) {
            setcookie('remember_me', '', time() - 100000);
            throw new Exception("Wrong username or password!");
        }

        $hour = time() + 3600;
        setcookie('ID_my_site', $_POST['username'], $hour);

        if ($_POST['remember']) {
            $month = time() + 3600 * 24 * 30;
            setcookie('remember_me', $_POST['username'], $month);
        }
        elseif (!$_POST['remember']) {
            if (isset($_COOKIE['remember_me'])) {
                $past = time() - 100;
                setcookie('remember_me', '', $past);
            }
        }




        $_SESSION['id'] = $user['id'];
        $_SESSION['user'] = $user['username'];
        header('Location: profile.php');

    }
} catch (Exception $exception) {
    $error = $exception->getMessage();
}

?>

Проверить с помощью pastebin.com/hqeynqXS - Сделаны модификации. Не тестировал.

Karlo Kokkak 30.03.2018 10:59

он говорит, что localhost слишком много раз перенаправляет меня, когда я открываю login.php.

TwinAxe96 30.03.2018 11:04

Для какого файла используется код - pastebin.com/hqeynqXS -?

Karlo Kokkak 30.03.2018 11:12

Это для файла login.php

TwinAxe96 30.03.2018 11:25

Можете ли вы вставить HTML-код HTML для входа в систему?

Karlo Kokkak 30.03.2018 11:28

И для profile.php тоже?

Karlo Kokkak 30.03.2018 11:29

Я буду через 30 минут, спасибо

TwinAxe96 30.03.2018 11:34
pastebin.com/q9bntYNZ - html для входа в систему pastebin.com/1JE67TGr - профиль
TwinAxe96 30.03.2018 11:58

Позвольте нам продолжить обсуждение в чате.

Karlo Kokkak 30.03.2018 12:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
9
38
0

Другие вопросы по теме