Dans mon code, je peux sélectionner "Se souvenir de moi", une fois sélectionné, il enregistre la valeur de l'e-mail et du mot de passe dans un cookie et le cookie dure 1 mois, maintenant lorsque l'utilisateur entre à nouveau sur la page, au lieu de conserver la session actif, il récupère la valeur du cookie enregistré et l'affiche sur le formulaire de connexion. J'utilise actuellement cloudflare et l'hébergement et j'ai essayé de configurer ces lignes de code :
php_value session.cookie_lifetime 2629800; php_value session.gc_maxlifetime 2629800;
Les deux sont dans php.ini et .htacces, mais le résultat est le même (la session sera fermée lorsque l'utilisateur fermera le navigateur).
Il s'agit de la fonction loginUser, elle gère la connexion et crée le cookie lorsque l'utilisateur coche "Se souvenir de moi", ce que je veux, c'est en cochant "Me rappeler", même si l'utilisateur ferme le navigateur ou revient après pendant un certain temps, la session reste active pendant le temps d'inactivité, mais la durée de la session est de 1 mois (2629800 secondes).
fonction loginUser($email, $password, $rememberme) { $mysqli = connecter(); $email = trim($email); $mot de passe = trim($mot de passe); if ($email == "" || $password == "") { return 'Les deux champs sont obligatoires'; } $email = filtre_var($email, FILTER_SANITIZE_EMAIL); $mot de passe = filtre_var($mot de passe, FILTER_SANITIZE_SPECIAL_CHARS); $sql = "SELECT * FROM utilisateurs WHERE email = ? LIMITE 1" ; $stmt = $mysqli->prepare($sql); $stmt->bind_param("s", $email); $stmt->exécuter(); $result = $stmt->get_result(); $data = $result->fetch_assoc(); si ($données == NULL) { return 'L'email n'existe pas, inscrivez-vous pour participer'; } if (password_verify($password, $data["password"]) == FALSE) { return 'Le mot de passe est incorrect, veuillez vérifier et réessayer'; } autre { $user_id = $data['user_id']; $_SESSION['auth_user_id'] = $user_id; $_SESSION["utilisateur"] = $email; $_SESSION["pass"] = $mot de passe; $_SESSION["nom d'utilisateur"] = $data['nom d'utilisateur']; $_SESSION["vérifier"] = $data['vérifier']; $_SESSION["profil"] = $data['profileImage']; $_SESSION["id"] = $data['user_id']; $_SESSION["vip"] = $data['vip']; setcookie('user_id', $data['user_id'], time() + 60 * 60 * 24 * 30, '/'); si ($souviens-toi de moi) { $cookie_name = 'Remember_US'; $cookie_value = json_encode(array('lemail' => $email, 'lpassword' => $password)); $cookie_expire = time() + (60 * 60 * 24 * 30) ; setcookie($cookie_name, encrypt($cookie_value), $cookie_expire, '/', null, true, true); } header("emplacement : index.php"); sortie(); } }PS :
php_value session.cookie_lifetime 2629800; php_value session.gc_maxlifetime 2629800 ; //Dans fonctions.php $expire = 60*60*24*30 ; // Nous choisissons une durée d'un an ini_set('session.gc_maxlifetime', $expire); session_start();但最多只能持续 2 小时。
TL;DR
setcookie
生命周期与$_SESSION
的默认PHPSESSID
Confusion du cycle de vie des cookies>.Exemple de workflow à réaliser
$_SESSION
遵守所需的生命周期,必须更新其PHPSESSID
cookie,将 cookie_lifetime 从默认值更改为一个月。这涉及手动管理$_SESSION
。以下是手动管理$_SESSION
:$_SESSION
en fonction de session_id.)$_SESSION
valeurs.$_SESSION
d'autres modifications avant que le session_id ne soit envoyé au client.)Bases de la gestion de sessiondevrait être utile. Vous pouvez également lireRéparation/Détournement de session PHP.
Dans les commentaires, RiggsFolly a offert des conseils qui méritent d'être pris en compte et Chris Haas a publié une excellente référence. Des solutions telles que la référence semblent suggérer de stocker une chaîne aléatoire comme clé de recherche de l'utilisateur et une chaîne hachée plus longue pour vérification. Les recherches et les chaînes de validation non hachées utiliseront
setcookie
, tandis que d'autres valeurs pourront utilisersetcookie
,而其他值可以使用$_SESSION
.