Maison  >  Questions et réponses  >  le corps du texte

Comment garder une session utilisateur active même après la fermeture du navigateur ou son retour après avoir été inactif en PHP pendant un certain temps ?

<p>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 : </p> <pre class="brush:php;toolbar:false;">php_value session.cookie_lifetime 2629800; php_value session.gc_maxlifetime 2629800;</pre> <p>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). </p> <p>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).</p> <pre class="brush:php;toolbar:false;">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(); } }</pré> <p>PS : <p> <pre class="brush:php;toolbar:false;">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();</pre> <p>但最多只能持续 2 小时。</p>
P粉826429907P粉826429907413 Il y a quelques jours439

répondre à tous(1)je répondrai

  • P粉549986089

    P粉5499860892023-09-04 00:49:29

    TL;DR setcookie 生命周期与 $_SESSION 的默认 PHPSESSIDConfusion du cycle de vie des cookies>.

    Exemple de workflow à réaliser $_SESSION 遵守所需的生命周期,必须更新其 PHPSESSID cookie,将 cookie_lifetime 从默认值更改为一个月。这涉及手动管理 $_SESSION。以下是手动管理 $_SESSION :

    1. Définissez session_name. (Un nom de cookie alternatif à PHPSESSID peut être défini.)
    2. Configurez les options de session. (Cela peut inclure le paramètre cookie_lifetime.)
    3. Créez et/ou définissez session_id.
    4. Démarrez une session. (Cette étape remplit $_SESSION en fonction de session_id.)
    5. Vérifiez la session. (Vérifiez si les paramètres d'authentification tels que session_id sont valides.)
    6. Accédez et modifiez $_SESSION valeurs.
    7. Fermerconversation. (Bloquez $_SESSION d'autres modifications avant que le session_id ne soit envoyé au client.)
    Ce lien sur

    Bases de la gestion de session devrait être utile. Vous pouvez également lire Ré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 utiliser setcookie,而其他值可以使用 $_SESSION.

    répondre
    0
  • Annulerrépondre