web-dev-qa-db-fra.com

PHP Sessions Connectez-vous avec souvenez-vous de moi

J'ai un PHP système d'enregistrement/connexion utilisant PHP Sessions qui fonctionne parfaitement, je veux que l'utilisateur puisse cocher se souvenir de moi et ensuite il reste connecté) pour toujours ou au moins une semaine ou quelque chose.

Je suppose que je dois stocker un cookie et vérifier, j'étais confus quant à ce que je dois réellement stocker dans le cookie. Si je stocke l'ID utilisateur ou le nom d'utilisateur, quelqu'un ne peut-il pas simplement utiliser un faux cookie pour consulter les données d'un autre utilisateur?

Toute avance est appréciée.

25
Exoon

Il vous suffit d'étendre le cookie de session PHP. L'exemple suivant étend le cookie de 30 jours:

$params = session_get_cookie_params();
setcookie(session_name(), $_COOKIE[session_name()], time() + 60*60*24*30, $params["path"], $params["domain"], $params["secure"], $params["httponly"]);

Je pense que par votre question de sécurité, vous êtes juste soucieux de mettre des valeurs qui peuvent être facilement piratées. PHP ont une valeur aléatoire et stockent son contenu sur le système de fichiers, donc ça devrait aller.

24
Luke

Après une connexion réussie, procédez comme suit:

$_SESSION['user_is_loggedin'] = 1;

$cookiehash = md5(sha1(username . user_ip));
setcookie("uname",$cookiehash,time()+3600*24*365,'/','.yoursite.com');

stocker en sql:

$sql = "UPDATE `users` SET `login_session`='$cookiehash' WHERE `user_id`='$uid'";

pour vérifier si l'utilisateur s'est connecté:

function CheckCookieLogin() {
    $uname = $_COOKIE['uname']; 
    if (!empty($uname)) {   
        $sql = "SELECT * FROM `users` WHERE `login_session`='$uname'";
        $_SESSION['user_is_loggedin'] = 1;
        $_SESSION['cookie'] = $uname;
        // reset expiry date
        setcookie("uname",$uname,time()+3600*24*365,'/','.yoursite.com');
    }
}

if(!isset($_SESSION['cookie']) && empty($_SESSION['user_is_loggedin'])) {
    CheckCookieLogin();
}
17
Gustonez