Question

J'ai un login typique (nom d'utilisateur, mot de passe) et que vous souhaitez également inclure une case à cocher "Mémoriser mes informations de. Le formulaire de connexion affiche ses valeurs à login_script.php et si la connexion est réussie, l'utilisateur est redirigé vers la page principale du site.

j'attache à utiliser cette méthode pour enregistrer les informations de connexion

//Remember Me Function

if(isset($_POST['remember_me'])){

    // Set a cookie that expires in 24 hours
    setcookie("username",$username, time()+3600*24);
    setcookie("password",$password, time()+3600*24);

}

Maintenant ce que je comprends, setcookie("username",$username, time()+3600*24); doit être en haut de la page PHP avant tout autre code est exécuté.

Mon problème est que je ne veux pas mettre le cookie à moins que l'utilisateur a ouvert une session avec succès. Cependant, en raison de la fonction cookie ensemble étant appelé au milieu du script après le test de connexion, il ne fonctionnera pas.

Toutes les idées? Vive.

Était-ce utile?

La solution

Tout d'abord:. Ne pas enregistrer les mots de passe dans un cookie Ceci est une très mauvaise idée sage sécurité

En ce qui concerne votre problème: il n'y a pas moyen de contourner cela, vous devez avoir aucune sortie du tout avant de régler votre cookie. Il y a deux façons d'y parvenir:

Solution 1: la page de connexion redirige toujours

Demandez à vos demandes de connexion vont à un script qui définit un cookie (si la connexion a réussi) puis toujours redirige l'utilisateur vers une autre page (par exemple un écran d'accueil, ou revenir à la page de connexion en cas d'échec). Le script de connexion ne génère une sortie, par conséquent, vous pouvez définir des cookies avant de rediriger.

Solution 2: mise en mémoire tampon de sortie

mise en mémoire tampon de sortie au début de votre script. Après la vérification de la connexion réussie, définissez le cookie premier , puis arrêter en mémoire tampon de sortie avec quelque chose comme ob_end_flush .

Personnellement, je considère la solution n ° 1 pour être plus élégant et supérieur en fonction.

Autres conseils

Il est une pratique très mauvais mot de passe de magasin dans les utilisateurs ont accès quelque part (côté client). Pire encore, vous ne l'avez pas hachage ou le mot de passe chiffrez lors du stockage du mot de passe (clients peut voir le mot de passe!)

Une bonne politique de sécurité est interdit à quiconque de ne jamais voir le mot de passe réel. Sauf lorsque le code fonctionne avec.

Vous pouvez faire ceci:

  • le mot de passe magasin dans la session
  • Prolongez l'expiration de la session à un temps plus long

Ou vous pouvez à la place

  • hachage et chiffrer le mot de passe
  • stocker les informations de connexion à un fichier sur le serveur
  • donner le fichier un nom unique
  • enregistrer le nom d'un cookie
  • chaque fois que vous recevez le cookie avec le nom de fichier correct, regardez le fichier et de récupérer les informations de connexion.

Mais je recommande toujours le premier parce qu'il est plus facile à mettre en œuvre et la gestion de session est effectuée par PHP (à moins que vous surchargeons la gestion de session)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top