Sessions+cookies (se souvenir de moi)

DDelec24 Messages postés 109 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 23 octobre 2007 - 8 juin 2007 à 18:05
DDelec24 Messages postés 109 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 23 octobre 2007 - 8 juin 2007 à 18:09
Bonjour.
Je viens faire appel a vous pour un problème de session.
Mon but est, comme souvent, d'avoir une coche "Toujours connecter" qui alors permet un auto login meme quand l'utilisateur a fermer son navigateur.
Le seul moyen est donc les cookies? Enfin je suis parti dans cet optique et j'ai fais le code suivant:

Pour se logguer:

if((isset($_POST['loginpa'])) || (isset($_POST['passwdpa']))) {
    if($_POST['loginpa'] = = "") $errlogin = 1;
    if(($_POST['passwdpa'] == "") && ($_POST['loginpa'] != "")) $errlogin = 2;
    if($errlogin == 0) {
        $mylogin = htmlentities($_POST['loginpa']);
        $mypasswd = htmlentities($_POST['passwdpa']);
        $query = $mysql->query_mysql("SELECT UP_LEVEL, MDPASSE FROM MEMBRE WHERE PSEUDO='$mylogin' LIMIT 1");
        if(mysql_num_rows($query) != 0) {
            $result = mysql_fetch_array($query);
            if($result['UP_LEVEL'] == "0") { header("Location: http://localhost/index.php?page=activateaccount&pseudo=$mylogin",301); }
            $mdpbdd = $result['MDPASSE'];
            if(md5($mypasswd) != $mdpbdd) {
                $errlogin = 2;
            } else {
                $_SESSION['pseudo'] = $mylogin;
                $_SESSION['leveluser'] = $result['UP_LEVEL'];
                $pseudomembre = $_SESSION['pseudo'];
                $level = $_SESSION['leveluser'];
                if(isset($_POST['rememberme'])) {
                    setcookie("papseudo",$pseudomembre,time()+60*60*24*90,"/");
                    setcookie("papwd",md5($mypasswd),time()+60*60*24*90,"/");
                } else {
                    setcookie("papseudo",$pseudomembre,time()+60*30,"/");
                    setcookie("papwd",md5($mypasswd),time()+60*30,"/");
                } // FIN COOKIE CONNEXION
            } // FIN MOTS DE PASSES IDENTIQUES
        } // FIN PSEUDO EXISTANT
    } // FIN 2 CHAMPS RENSEIGNÉS
}else {
    if($_SESSION['pseudo'] != "") {
        $pseudomembre = $_SESSION['pseudo'];
        $level = $_SESSION['leveluser'];
    } else {
        // COOKIES EXISTANTS MAIS MEMBRE NON LOGGUÉ
        if((isset($_COOKIE['papseudo'])) && (isset($_COOKIE['papwd']))) {
            // SI LES COOKIES NE SONT PAS VIDES
            if(($_COOKIE['papseudo'] != "") && ($_COOKIE['papwd'] != "")) {
                $pseudocookie = $_COOKIE['papseudo'];
                $mdpcookie = $_COOKIE['papwd'];
                $query = $mysql->query_mysql("SELECT UP_LEVEL, MDPASSE FROM MEMBRE WHERE PSEUDO='$pseudocookie' LIMIT 1");
                // SI LE LOGIN EXISTE
                if(mysql_num_rows($query) != 0) {
                    $result = mysql_fetch_array($query);
                    // SI LES MOTS DE PASSES SONT IDENTIQUES
                    if($mdpcookie == $result['MDPASSE']) {
                        $_SESSION['pseudo'] = $pseudocookie;
                        $pseudomembre = $pseudocookie;
                        $_SESSION['leveluser'] = $result['UP_LEVEL'];
                        $level = $_SESSION['leveluser'];
                    } // FIN MDP IDENTIQUES
                    else {
                        setcookie('poweranimepseudo','', time()-3600); // expiration cookie pseudo
                        setcookie('poweranimepwd','', time()-3600); // expiration cookie password
                    }
                } // FIN PSEUDO EXISTANT
                else {
                    setcookie('poweranimepseudo','', time()-3600); // expiration cookie pseudo
                    setcookie('poweranimepwd','', time()-3600); // expiration cookie password
                }
            } // FIN COOKIES NON VIDES
        } // FIN COOKIES EXISTANT ET SESSION PSEUDO INEXISTANTE
    } // SESSION OUVERTE
} // FIN FORMULAIRE NON SOUMI


Pour se délogguer:

if(($_GET['action'] ! = "") && ($_GET['sid'] != "")) {
    $action = htmlentities($_GET['action']);
    if($action == 'logout') {
        $sid = htmlentities($_GET['sid']);
        if($sid == session_id()) {
            // DESTRUCTION DES DONNEES DE SESSION ET DE LA SESSION
            $_SESSION = array();
            session_destroy();
            setcookie('papseudo','', time()-3600); // expiration cookie pseudo
            setcookie('papwd','', time()-3600); // expiration cookie password
        }
    }
}

Ce qu'il se passe, c'est qu'au premier deloggue, la session est recréé et si je reclique ca fonctionne bien... je suis délogguer.
Sinon quand je ferme le navigateur et que je le ré ouvre, meme si j'ai coché Toujours connecter ca ne fonctionne pas :(

j'ai fais mon petit algo mais aparement c'est pas trop ca
J'ai pas testé l'expiration du cookie pour le déloggue automatique mais je doute que ca fonctionne

Bref je viens faire appel a votre aide car la j'ai quelques difficultés!
Il existe une classe pour login(automatique ou non) avec sessions + cookies?

Merci de votre aide.
Cordialement, AigleNoir [:)]

1 réponse

DDelec24 Messages postés 109 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 23 octobre 2007
8 juin 2007 à 18:09
PS: jai omi de changer le nom du cookie pour leurs créations mais c'est une erreur j'avais réduit le nom pour voir si ca venais de la longueur et j'ai pas changé avant d'envoyer

PS: pas de fonction éditer? sniff

Cordialement, AigleNoir [:)]
0