Interdire l’accès au même login une fois que session ouverte

Eléphant du PHP | 81 Messages

24 avr. 2006, 11:49

Bonjour à tous,
J’ai une partie de mon site qui est sécurisé avec login et mot de passe.
Mon problème c’est que pour l’instant plusieurs sessions en simultanées peuvent être ouverte avec le même login et mot de passe.
Comment faire pour interdire l’accès au même login une fois que la session est ouverte avec celui-ci.

Voici un bout de contrôle de login et mot de passe :
<?php

require_once('SQL/param_connect.php');

//Bloque entré direct sue la page
if(isset($_POST['login']) && isset($_POST['pwd'])){

			$_SESSION['login']=strtolower($_POST['login']);
			$_SESSION['pwd']=strtolower($_POST['pwd']);
}
elseif(!isset($_SESSION['login']) && !isset($_SESSION['pwd'])){
                include('non_autorise.php');
				exit();
	}
//Verification login password
$login=$_SESSION['login'];
$pwd=$_SESSION['pwd'];

$r="select * from clients where Email= '$login' and Pwd= '$pwd'";
$rq=mysql_query($r);
$n=mysql_num_rows($rq);


//on récupére la date d'aujourd'hui
$date= date("Y-m-d");

if($n==0){
		include('mauvais_login.php');
		exit();
	}else{
        //on verifie que la date de fin d'abonnement n'est pas < à la date d'aujourd'hui
        for($i=0;$i<$n;$i++){
        $df=mysql_result($rq,$i,'Date_fin');
        $auto=mysql_result($rq,$i,'autorisation');
        $Statut=mysql_result($rq,$i,'Statut');
        $N=mysql_result($rq,$i,'Nom');
        $nS=mysql_result($rq,$i,'Nom_stagiaire');
        $p=mysql_result($rq,$i,'Prenom');

            if($df<$date){
            include('abonnement_expire.php');
		    exit();
            }elseif($auto!=1){
            include('paiement_non_valide.php');
		    exit();}
        }
}
?>
Merci.

ViPHP
ViPHP | 3607 Messages

24 avr. 2006, 12:32

Tu peux faire une table de logs, et à partir de là tu vérifi qui est connecté et déconnecté, ou qui est connecté mais pas encore déconnecté...
Y a quand même un petit problème avec ça, que je n'ai pas encore résolut, moi j'avais à la connection stocké l'heure de connection, et laissé l'heure de déconnection à 0000-00-00 00:00:00, et je vérifiai lors de la connection si dans la table de logs, il existait un pseudo dont l'heure de deco coorespondait à 000-00-00 00:00:00, à ce moment là je refusait l'accès...
Seulement, si le visiteur ne clicait pas sur déconnection, je ne modifiait pas la table et donc même lui ne peu plus après se connecter...
Il faudrait une tache cron ou qqch comme ça pour dire de changer tte les connections de plus de 4h par exemple...

Eléphant du PHP | 81 Messages

25 avr. 2006, 12:45

La solution que j’ai trouvé pour l’instant c’est de récupérer la session_id de l’internaute qui se log et de l’insérer dans la BDD, lorsqu’un autre veux se loguer en même temps avec les mêmes identifiants je lui interdis l’accès. Par contre le soucie c’est comment effacer la session dans la BDD si l’internaute ferme directement la fenêtre sans se déconnecter. Du coup la session n’est pas effacé et lorsque il se reconnecte, l’accès lui est interdit.

L’option tache cron n’est pas une solution à mon problème.

Quelqu’un aurait il une solution ?