Variable PHP lors de la fermeture de IE

Fermé
rayda Messages postés 15 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 18 juin 2008 - 18 juin 2008 à 10:00
burnedsyn Messages postés 170 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 21 février 2009 - 18 juin 2008 à 11:40
Bonjour à tous,

Voila, je développe une interface web pour se connecter à une base MYSQL,

Mon souci, c'est que j'ai un menu connexion qui permet avec un login et psswd de se connecter d'afficher les autres

menu de saisies, J'ai crée un champ dans la table user qui s'appel Idconnexion, que je met à 1 lors de la connexion,

et à 0 lors de la déconnexion, et cela pour éviter deux connexion simultané.

Tous cela marche très bien, le seul ik, c'est que si l'utilisateur ferme la fenetre sans cliquer sur déconnexion, cette variable reste à 1, et du coup de peux plus se reconnecté, car considéré comme déja connecté

voila mon code
//connexion
<? 
     include ("conneDB.php");
	 
	 $Login=$_POST['Login'];
	 $Pssw=$_POST['Pssw'];
	 $Date=date("d/m/Y");
	 
	 if($Login==''||$Pssw=='')
	 	{
		echo'<p>Tous les champs ne sont pas remplis</p>';
		include ('menuleft.html');
		exit;
		}
	
		$req1=mysql_query("select Pssw from utilisateur where Login='$Login'") or die("Connexion échouée");
		$data1=mysql_fetch_array($req1);
		$reqco=mysql_query("select IdConnexion from utilisateur where Login='$Login'");
		$resultco=mysql_fetch_array($reqco);
		$ErrCo=$resultco['IdConnexion'];
		
                  if($ErrCo==1){ 
echo $Login." "."est déjà connecté, retour à <a href=\"menuleft.html\" target=\"leftFrame\" >l'acceuil</a>.";
		
                             exit(); }
		
		//cette variable je l'envoi par GET sur le lien déconnexion et je met à jour la table . 
//Déconnexion:

<?      $IdConnexion=$_GET['IdConnexion']; //cette variable est à 0
	  $Login=$_GET['Login'];
	  	
            include('conneDB.php');
	   mysql_query("update utilisateur SET IdConnexion='$IdConnexion' where Login='$Login'");

?>


Je veux que cette variable soit à 0 si on ferme la fenetre même sans déconnecter.

1 réponse

burnedsyn Messages postés 170 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 21 février 2009 16
18 juin 2008 à 10:50
Hello,

Pour moi tu as deux solutions :

la première est basé sur javascript et les techniques ajax (toutefois pour un utilisateur n'ayant pas js activé cela n'irais pas)
ici tu ajoute un eventhandler sur le unload de la page et par ajax tu envois ta requete au serveur en mettant le champs a zéro.



la seconde est basé sur un Time To Live pour ta session (c'est ma préférée).
dans ce scénario :

1) tu dois changer ta table et ajouté un champ time que tu appelle ttl par exemple
2) au premier login de l'utilisateur :
tu as deux solution possible soit l'utilisateur n'est pas connecté (donc ton champ a 0) et la tu met le idconnexion a 1 et ton ttl a maintenant + 5 10 15 20 minute (suivant ton desir)
soit l'utilisateur semble etre connecté (ton champ a 1) et la tu verifie le TTL donc si maintenant > TTL alors ton champ de connexion tu le met a 0 et tu redemande le login.
3) a chaque mouvement de l'utilisateur sur le site tu mets le ttl a jour en ajoutant de nouveau 5 10 15 20Min

Cela empechera le double login et ne sera pas bloquant si l'utilsateur ne se deconnecte pas, car au bout du temps max que tu as définis la session sera automatiquement invalidé

Voila si tu veux des exemple de codes dis le je te ferais cela dès que pôssible

Bye a bientot
Tim
0
rayda Messages postés 15 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 18 juin 2008
18 juin 2008 à 11:09
Merci pour ta réponse.

Je comprend pas bien par contre comment définir le TTL, comment va-t-il évoluer?? est ce que c'est une fonction php??

si tu as un exemple de code ca serait pas de refus.

Merci. Aplus
0
rayda Messages postés 15 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 18 juin 2008
18 juin 2008 à 11:14
Haa exuse moi, j'ai rien dis:)

En fait j'incrémente ce TTL à chaque fois et je le met à jour dans la table??

Une condition me permettra de refuser la connexion par rapport à ce TTL??

j'éspère que j'ai bien compris, jessaye de faire ca, et ca risque de prendre du temps.

Merci.
0
burnedsyn Messages postés 170 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 21 février 2009 16 > rayda Messages postés 15 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 18 juin 2008
18 juin 2008 à 11:40
Oui c'est bien cela je te met ici un bout de code que j'utilise pour cette action particulière.

        /* ici on a un user validé mais la session est elle encore valide ou l'ip à changé ou encore la validité de la session en cours est elle confirmée */
        $val_query="SELECT * FROM validlogin where ipsession='$ip' and vsession='$vsession' and validity > NOW()";
        $val_res=mysql_query($val_query) or die (mysql_error());
        $val=mysql_fetch_object($val_res);
         if(mysql_num_rows($val_res))
        {

           $query="UPDATE validlogin set validity= ADDDATE(NOW(), INTERVAL 15 MINUTE) where ipsession='$ip' and vsession='$vsession'";
           $res=mysql_query($query) or die (mysql_error());
           return 1;
        }
        else
        {
           /*si l'une des conditions est fausse nous n'avons pas de résultat on invalide $vuser et on rappel la meme fonction c une fonction récursive*/
             $_SESSION['validuser']=0;

             $query="delete from validlogin where validity < NOW()";
             mysql_query("$query") or die(mysql_error());
             checkpoint();
             return 0;
        }
    }
    else
    {
        /*l'une des conditions n'est pas valide l'on procède au login*/
        $query="delete from validlogin where validity < NOW()";
        mysql_query("$query") or die(mysql_error());

        include('login2.php');
        return 0;
    }
}

Voila tu a un aperçu du systeme de TTL
0