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粉826429907
P粉826429907 2023-09-03 08:53:53
0
1
368

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 小时。

P粉826429907
P粉826429907

répondre à tous (1)
P粉549986089

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

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

  1. Définissezsession_name. (Un nom de cookie alternatif à PHPSESSID peut être défini.)
  2. Configurez les options de session. (Cela peut inclure le paramètrecookie_lifetime.)
  3. Créezet/oudéfinissezsession_id.
  4. Démarrez unesession. (Cette étape remplit$_SESSIONen 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$_SESSIONvaleurs.
  7. Fermerconversation. (Bloquez$_SESSIONd'autres modifications avant que le session_id ne soit envoyé au client.)
Ce lien sur

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 utiliserontsetcookie, tandis que d'autres valeurs pourront utilisersetcookie,而其他值可以使用$_SESSION.

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!