Controler la connexion a mon application

Résolu/Fermé
cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011 - 14 sept. 2009 à 12:45
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 13 oct. 2009 à 10:34
salut a tous ,
je travail sur un application de gestion de courier en ligne. pour l'acces j'ai cree un table USERS dans Mysql ou est stocke les login et password des differents utilisateurs. j'ai eglament utilise les variables sessions pour les connexions , donc je recupere les loggin et password dans des variables session apres chaque session.
mon probleme est le suivant: jusqu'ici plusieurs utilisateurs peuvent se connecter avec le mm compte. comment je peux remedier a ça ?? du genre avant chaque connexion , le systeme s'assure d'abord que le compte n'est pas deja utilise par une autre personne... est ce que quelqun a un script qlque part qui peut m'aider ??
merci a vous ....
A voir également:

18 réponses

cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011 7
16 sept. 2009 à 17:31
slut ,
juste pour savoir si personne n'a rien trouvé pour moi ????????
0
cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011 7
18 sept. 2009 à 09:49
toujours rien alors ......
aidez moi svp , I am really clamped.....
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
18 sept. 2009 à 10:08
i have a solution, but you will have to develop it by yourself.

when user connectes, you register it's ip, and time of last action of the site. If it's IP changes too fast, this mean 2 persons are connected.

you can also add more safety by putting a cookie on it's computer
0
cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011 7
18 sept. 2009 à 11:02
thank's for this answer ,,, but please i need more indications ,,,I admit that I am not really an expert php...
how can do to register time of last action of the site ???
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
18 sept. 2009 à 11:09
bon, on va se la faire en francais pour que d'autres puissent aider aussi ;)

j'ai meme une meilleure idée que ce que je t'ai dit.
lorsque le client se log sur le site, tu génères un nombres aléatoire (plus il est grand, mieux c'est). A la limite, tu peux faire un hashage md5 du nom de client, de son ip, de l'heure, et meme d'une donnée aléatoire.
tu enregistres cette valeur dans la session ($_SESSION[]) et dans un champs de ta base de données (dans la table utilisateurs par exemple).
A chaque chargement de page du client, tu vérifies que la valeur dans la session est bien la meme que dans la bdd. Si c'est la meme, alors le client est toujours le meme, tu lui donne la page demandé. Si la valeur n'est pas la meme, alors il s'est loggué depuis un autre ordinateur: il faut lui demander de se re logguer. A la limite, tu peux meme du coup changer la valeur dans la base de données pour que meme le 2° client soit kiké !
0
cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011 7
18 sept. 2009 à 11:16
c vrai que la c moins contraignant ,,, on a pas besoin de recuperer le temps de la derniere action sur le site. Mais sauf que la il y a un gros ik a mon avis .... les utilisateurs vont passer le temps a se deconnecter les uns les autres,,, et la c pas bon du tout ,,, qu'est que tu en penses ?
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192 > cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011
18 sept. 2009 à 11:30
ben non.
ta table utilisateur a par exemples les champs:
- login
- password
- hashage

quand tu veux récupérer le hashage, tu le récupères pour le compte utilisateur que tu souhaite. donc le compte "robert" ne déconnectera jamais le compte "bernard"
0
cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011 7 > Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014
18 sept. 2009 à 11:43
tout a fait ,,, mais pour mon cas , le but est d'empecher deux personnes de se connecter avec le mm compte (on est d'accord qu'il peut arriver qu'un utilisateur ai le login et le pwd d'un autre mm par tricherie) et tu conviens avc moi qu'avec cette solution, a chaque fois qu'un va se connecter il va deconnecter l'autre ,,,,,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
18 sept. 2009 à 11:55
je ne comprends pas ce que tu veux dire par :
on est d'accord qu'il peut arriver qu'un utilisateur ai le login et le pwd d'un autre mm par tricherie
Pour moi, si c'est le meme login et le meme mot de passe, alors c'est le meme compte. D'ailleurs je mettrai meme le login en tant que clef primaire de la table ....
0
cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011 7
18 sept. 2009 à 12:07
je m'explique : imagine que tu as ton login (qui est biensur unique dans la bd) et qu'un jour par negligeance ça me tombe sur les mains( avec ton passe biensur), est ce que oui ou non je vais me connecter avec au systeme.
je crois que 'oui' si aucune disposition n'est prise. et c la mon objectif : empecher que le mm compte soit utise au mm moment sur des postes differents,,,, et je crois que ta premiere reponse allait dans ce sens ...
mon probleme par rapport a cette reponse etait de savoir comment derterminer et recuperer le tps de la derniere action sur le navigateur ,,,,
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
18 sept. 2009 à 13:50
avec la 2° solution, quadn un 2° gars se connecte, le gars qui était connecté avant a sa session qui se termine, avec un message du genre "vous venez de vous connecter depuis un autre poste".

avec la première solution, c'est l'inverse: ca dit "vous êtes déja connecté depuis un autre poste".

je crois que j'avais déjà approfondi le sujet avec un gars, mais il y a un moment (entre fevrier et juin)... tu peux essayer de chercher dans l'historique de mes discutions, mais tu risques d'en avoir pour un moment !

dis moi quel fonctionnement tu souhaite lors d'une 2° connexion: qui doit rester connecté ?
0
cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011 7
18 sept. 2009 à 14:36
trs bien ,, je vais fouiller.
mais en fait je souhaite bloquer completemnt la deuxieme connexion qd la premiere est dja ouverte. donc l'utilisateur reçoit un message du genre " une session est deja ouverte a ce compte, veuillez conctacter l'administrateur.."
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
18 sept. 2009 à 14:50
j'ai des solutions mais ca va prendre des ressources....
tu rajoutes un champ (dernière fois vu)dans la table utilisateurs

à chaque fois que la personne charge une page, tu vérifies que l'identifiant dont je te parlait en (5), et tu changes stoques dans la BDD la derniere fois que cet identifiant a donné signe de vie.
lors de la demande de connexion, tu vérifies que la personne n'ai pas ouvert donné signe de vie récement. Si il a télécahrgé depuis pas longtemps, tu refuses la connexion. Sinon, tu autorises. (penser à mettre un systeme de déconnexion sur le site, si la personne change de navigateur ou d'ordinateur)

encore mieux: un script en ajax dans toutes tes pages qui envoie toutes les 30 secondes un "keepalive"-> update du champs "dernière fois vu". Lors d'une 2° connexion, vérification qu'il n'y a pas eu de keepalive depuis une minute par exemple. Si il y en a eu un: on refuse,; si il n'y en a pas, tu crées la nouvelle conenxion.

je pense que je vais essayer de faire un petit bout de code pour cette partie ce week end, et poster une astuce, car visiblement, beaucoup de personnes se demandent comment faire ca.

dans tout les cas, n'hésites aps à me redemander si je ne le fais pas, ou a poster ton code si tu le fais avant moi !
0
cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011 7
18 sept. 2009 à 15:28
treb bien ça marche ,,, donc je continu a fouiller et si je trouve avant je poste ( mais qd mm !!! je suis dessus depuis 3 jrs, j'ai deja presque tout tenté ,,, peut etre j'aurais un coup de grace cette fois ci )

ps: voici une piste que j'ai u en fouillant,,,, tu poura jetter un coup d'oeil et me dire ce que tu en pense

..... pourquoi ne pas ajouter dans ta table users, un champ 'derniere activitee', un champ 'online' (et un champ ip)

s'il ne n'a pas clique sur un lien 'log out' et si la derniere activitee date de plus de 5 min (par exemple) tu consideres qu'il a timeout et tu autorise la connexion sur un autre pc.....

il precise a la suite il precise:
...... au debut de chaque page, tu peux tester ca :

* si tes variables de session n'existent pas, tu redirige vers la page de connexion
* si la variable de session de timeout n'existe pas, tu l'initialise avec la valeure de la BDD
* si la valeure du timeout > "maintenant + X minutes", tu passe la valeur du 'online' a zero; et tu redirige vers la page de connexion
* si tous les tests ont ete passes, tu mets a jour le timeout dans la BDD
.....
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192 > cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011
18 sept. 2009 à 15:31
t'as trouvé ca ou ?

a la limites, explores cette voie, moi je me suis fait un petit bloc notes avec les dev que je vais faire pour la FAQ et pour un autre site ...
0
cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011 7 > Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014
18 sept. 2009 à 15:49
https://www.developpez.net/forums/d807880/php/langage/controler-connexion-application/#post4654211

et la tout coe chz toi il faut recuperer le tps et comparer le temps de la derniere action....
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
20 sept. 2009 à 17:03
bon, j'ai fait quelques tests.

je t'invite à regarder ces scripts (attention, c'est juste un "proof of concept")

script sql de création de la table de tests:
CREATE TABLE IF NOT EXISTS `users` (
  `login` varchar(15) NOT NULL,
  `password` varchar(15) NOT NULL,
  `keep_alive` int(11) NOT NULL,
  `ID_client_md5` varchar(32) NOT NULL,
  PRIMARY KEY (`login`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

mon utilisateur s'appelle nablas et il n'y a pas de vérification de password à faire


fichier connexion_bdd.php
<?php
$host = 'localhost';	//serveur mysql
$user = 'root';			//login
$passwd  = '';			//mot de passe
$bdd = 'test_users';	//nom de la base de données

// Connexion au serveur
mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
?>


fichier index.php (ou.html ca change rien)
<html>
<body>
<form method=POST action="traitement.php">
login:
<input name="login" value="nablas"/>
<input type="submit" />
</form>
</body>
<a href="test.php">test</a>
</html>


fichier keepalive.php (appellé par le script javascript de traitement: tant qu'une page du site est ouvert, il envoie un signal disant que la session est toujours active)
<?php session_start();
	include("connexion_bdd.php");
	$timestamp = time();
	mysql_query("UPDATE `users` SET `keep_alive` = $timestamp WHERE `login` like \"$_SESSION[login]\"");
?>


et pour finir, le fichier traitement.php
<?php session_start();?>
<html>
	<script type="text/javascript">
	Ajax();
	function Actualise(){}
	function Ajax(){
		setInterval("Ajax()", 2000 );	//prochaine actualisation

		if(window.XMLHttpRequest) 		// Firefox   
			xhr_object = new XMLHttpRequest();    			
		else if(window.ActiveXObject) 	// Internet Explorer       			
			xhr_object = new ActiveXObject("Microsoft.XMLHTTP");   
		else 
		{ 								// Autre   			
			alert("pas d'AJAX");       		
			return;   
		}   
		xhr_object.open("POST", "keepalive.php", false);
		xhr_object.send(null);
		xhr_object.onreadystatechange = Actualise();
	}
	</script> 
<body>
<?php
include('connexion_bdd.php');
$login= $_POST['login'];

//adresse IP de l'hote
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
    $IP = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    elseif(isset($_SERVER['HTTP_CLIENT_IP']))   
    $IP = $_SERVER['HTTP_CLIENT_IP'];   
    else $IP = $_SERVER['REMOTE_ADDR'];  

// Creation et envoi de la requete
$result = mysql_query("SELECT * FROM users WHERE login='$login';");

if($objet = mysql_fetch_object($result))
{
	if ( ($objet->keep_alive) + 10 < time())
	{
		$md5 = md5($login.time().$IP);   //petit identifiant perso
		
		$_SESSION['ID_client_md5']=$md5; //enregistrement de l'identifiant perso dans la session
		$_SESSION['login']=$login;
		
		//enregistrer l'identifiant perso dans la BDD
		mysql_query("UPDATE `users` SET `ID_client_md5` = '$md5' WHERE `login` like '$login'");
		echo "vous êtes bien connectés";
	}
	else
	{
		echo "une session est déja ouverte sur un autre poste";
		unset($_SESSION['login']);
	}
}
?>
</body>
<html>


je suis sur que certains trouveront plein de choses à redit à ce script, comme quoi il n'est pas complet, pas fini de ch*é, mias c'est normal, c'est juste une démo. Je les invite à le corriger quand je le publierai


fonctionnement: tu ouvres le scipt dans un premier navigateur (IE), tu connectes, ok, tout se passe bien.
tu ouvres firefox, tu esssayes de te connecter alors que la session IE est tjs ouverte: ca coince. Tu fermes IE, tu retentes de te connecter avec firefox, ca passe.

j'ai fait l'autre version du script, celle qui déconnecte la première personne, mais je la posterai quand le publierai dans la FAQ
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
23 sept. 2009 à 10:54
alors, as tu résolu ton problème ?
0
cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011 7
29 sept. 2009 à 10:20
bjr, de retour aprs une longue absence !!!!
ecout tes scripts ont parfaitement resolu mon probleme, oouuuf !!!!
le script Ajax-jscript est magic !!! mon probleme du navigateur qui arrete la session aprs un tps
d'inaction ne se pose plus du tout: keepalive est reactualise tte les 30 min,,,, vraiment bien pensé.
merci encore ,, vivement qu'on ai la version ou le premier user est deconnecté (pour la biblio surtout ...)
je suis en veille et j'ai hate de le tester.

PS: juste un truc: j'ai pas compris a quoi sert l'adresse ip recupere :

//adresse IP de l'hote
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$IP = $_SERVER['HTTP_X_FORWARDED_FOR'];
elseif(isset($_SERVER['HTTP_CLIENT_IP']))
$IP = $_SERVER['HTTP_CLIENT_IP'];
else $IP = $_SERVER['REMOTE_ADDR'];


A tres bientot.
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
29 sept. 2009 à 10:30
l'ip c'était pour personailiser un peu plus l'identifiant .. c'est pas indispensable. Si ca se trouve, je l'avais plutot mis là pour l'autre script que j'avais fait avant

j'avais oublié que j'avais dis que je publierai l'autre solution.
il faut quand meme que je rende le code plus propre pour pouvoir le mettre dans les astuces (sinon il y a plein de programmeurs "chevronnés" ou casse bonbon qui vont raler ;)

n'hésites pas à me relancer si j'oublie de mettre l'autre solution
0
cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011 7
29 sept. 2009 à 11:30
ok !!! je ne te lache plus, jusqu'a ce que le l'ai ...
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
29 sept. 2009 à 11:32
si tu as fais des modifs interessantes sur le script ci dessus, n'hésites pas à les poster ...
0
cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011 7
29 sept. 2009 à 13:14
ok, je ne manquerais pas
0
cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011 7
8 oct. 2009 à 11:48
hey !!!! salut ,, c encore moi
est ce que le deuxieme script est deja disponible ? celui qui deconnecte le premier utilisateur quand un deuxieme se connecte avec le meme compte que lui.
juste pr te rappeler, don't forget us please !!!!
thanks
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
8 oct. 2009 à 11:54
tu fais biend e me rapeller. il est disponible depuis longtemps, mais sur mon ordi ;) il faut que je pense à le poster ....
0
cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011 7
8 oct. 2009 à 12:19
cool !!! on attends donc ,,, je te rappelle au cas ou ....
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
13 oct. 2009 à 10:34
désolé, j'ai toujours pas posté...
par contre hiers j'ai fait un truc inverse (j'ai demandé les avis des autres contributeurs), et donc peut être que je posterai une astuce aussi pour un truc qui fait totalement l'inverse:
fusion des sessions de deux utilisateurs (deux personnes partagent les mêmes variables de sessions). J'ai testé, ca marche...

et je pense que j'essayerai de faire un truc inspiré des sources que je vais mettre ici: si connexion depuis un 2° poste sur un meme compte utilisateur, alors partage de session ! (j'ai pas encore trop d'idées d'applications concrètes, mais bon... peut être un "super panier" pour les sites de vente en ligne => un caddie quoi ;)
0