Controler la connexion a mon application

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
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 29 sept. 2009 à 17:30
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 ....

12 réponses

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 à 10:01
tjrs rien pour moi ???? je suis vraimnt coincé ,, please help !!!
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
18 sept. 2009 à 10:13
Bonjour,

Si tu crée une table "session" dans laquelle tu met les colonnes :
ID (Int autoincrément), ID_User (Int clé étrangère de USERS.ID), Session (VARCHAR 255), UpdateDate (Date mise à jours sur update)

A partir de la, a la connexion tu ajoute l'user dans cette table avec sa session php
A la déconnexion tu le vire de la table
A chaque chargement de page, tu met la date a jours

Tu met en place un système de ping pour que si un user reste plus de 5 min sur la même page qu'il mette à jours sa ligne...

A chaque chargement de page tu vire de la table tout les users qui un une date dépassée de 10 min...


La tu sais à 10 min prêt si un user est en ligne ou non...

_________________________________
Min iPomme
0
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 à 10:37
franchement,,, c'est plutot simple comme solution, par rapport a tout ce que j'essaye de mettre sur pied,,,
je vais juste te demander de me faire une petite precision stp comment je peux faire pour tester en permanence, si un user est reste plus de 5min sur un page,,,
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
18 sept. 2009 à 10:55
Je te conseil un ping Javascript

Une page php qui met à jours ta table SESSION en php appelée à intervalle régulier depuis le client via de l'ajax feras l'affaire...

Tu as besoin de connaitre les bases de l'ajax ;
De savoir appeler une fonction à intervalle régulier en javascript ;

Allé, si tu ne trouve pas je t'autorise à regarder la suite de mon message... Mais je te conseil d'essayer avant...

Texte blanc sur fond blanc
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

// Initialisation des var
var timerID = '';

// Ici c'est une requete l'ajax de base
// A adapter si tu urilise des lib javascript comme mootools
function getXhrPing(){
var xhr = null;
if(window.XMLHttpRequest)
{
xhr = new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else
{
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
return xhr;
}

// Ensuite ce qu'on veux faire c'est lancer un timer
// qui fais une requete toute les 5 min
function goPing(){
var xhr = getXhrPing();
xhr.onreadystatechange = function(){
if(xhr.readyState 4 && xhr.status 200){
// Le ping c bien passé
}
if(xhr.readyState == 4 && xhr.status != 200){
// Erreur de ping faudrais en relancer un...
}
}
// Ici tu appel ta page qui metteras a jour ta table en bd
// le &nocache= suivis du Math.random() sert à étre
// sur que le navigateur charge bien la page et ne se
// sert pas de son cache
xhr.open("GET","index.php?view=ping&nocache=" + Math.random(), true);
xhr.send(null);
}

// Fonction a appeler sur en bas de page ou une fois le DOM chargé
function ping_session()
{
goPing();
// Pinger tt les 5 min reviens a lancer une fonction toute les 5*60*1000 milisecondes
timerID = setTimeout('ping_session()', 5*60*1000);
}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Texte blanc sur fond blanc

_________________________________
Min iPomme
0

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

Posez votre question
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:06
franchement la ,je crois que la je vais m'arracher les cheveux ,,, deja je viens a peine de me mettre a javascript pour faire de petits controles ,, et voila que je dois dja apprendre ajax !!! rendez vous le moi prochain donc ... a moins que tu ne fasses quelque chose pour moi vraiment


tatus
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
18 sept. 2009 à 11:16
Comme je l'ai écris, c'est de l'Ajax de base, tu as juste à appeler une page php via ton Javascript...

En gros c'est comme si l'utilisateur actualisais sa page toute les 5 min... Mais tu comprends bien que forcer l'actualisation de la page d'un utilisateur n'est pas pratique (Perte de ces données si il rédige un message dans un formulaire...)
Du coup on demande à JavaScript de charger une page en arrière plan... Sans que l'utilisateur ne le vois...

Regarde ce que j'ai écris en blanc et pose moi des questions si tu veux... Lis aussi le tutoriel que je t'ai fournis au dessus, il est assé claire pour débuter.
_________________________________
Min iPomme
0
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 à 13:51
ok ,
1- j'ai cree une table session avec tout les champs cite ci-dessus coe prevu.
2- a chaque connexion le systeme
. verifie si le login et le pwd est bon si oui
. cree un session ($_session[]...) pour le user en question
. verifie si une ligne correspant a ctt session existe dja dans la table 'session' sinon
. ajoute une ligne dans la table session
. et donne l'acces a l'utilisateur.

pour le deconnexion :
1- la ligne correspondant a l'user est detruite dans la table 'session' et les sessions sont detruite ( session_destroy ,session_unset...)

la pas de probleme ,,,,

maintenant ( et la bien comprendre, parceque trs important a mon avis et tu ne tiens pas compte de ça dans ta solution...)

si l'user reste un certains tps( je crois 24 min par defaut) sans rien faire sur le systeme,,,les sessions le ferme automatique( principe de ftionnement des variables sessions sur php...),mais sa ligne n'est pas detruite dans la table 'session',

consequence: pour de nouveau travailler l'user sera oblige de se reconnecter,,, chose qui lui sera impossible parceque sa ligne est reste dans la table 'session'.

alors: il faut que dans le cas ou le navigateur detruit les sessions aprs un tps d'inactivité ,,, la ligne de l'user connecte soit supprime dans la table 'session'

retour donc a la case de dpart ,, puisqu'on rvient au probleme posé au depart ,,
qu est que tu en penses ????
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
18 sept. 2009 à 14:42
si l'user reste un certains tps( je crois 24 min par defaut) sans rien faire sur le systeme,,,les sessions le ferme automatique( principe de ftionnement des variables sessions sur php...),mais sa ligne n'est pas detruite dans la table 'session',

Alors, non puisque tu ping toute les 5 min... Tu relance l'activité de sa session...

Avant de tester si l'user est connecté, tu supprime de ta table toutes les lignes qui ont une date de plus de 5 min... Donc au pire, si l'user ferme son navigateur violemment, il faudra qu'il attende 5 min avant de se reconecter...

Je pense même que tu peux régler ca avec une déconnexion en passant par javascript :
http://www.developpez.net/forums/d231473/dotnet/contribuez/d1-fermer-session-fermeture-navigateur/


_________________________________
Min iPomme
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
18 sept. 2009 à 21:39
Salut,

J'ai vraiment lu en diagonale, donc juste 2/3 remarques :
Donc au pire, si l'user ferme son navigateur violemment, il faudra qu'il attende 5 min avant de se reconecter...

C'est énorme !! Même une trentaine de secondes l'est, à mon humble petit avis.
Je pense que les premières questions a se poser sont :
"Est ce grave qu'un utilisateur se connecte à plusieurs endroits ?"
Cyrilherve : j'imagine que tu te l'es posé et que la réponse est oui (pour quelles raisons ?)

"Faut il interdire une nouvelle connexion ou déconnecter l'ancienne ?"
Il y a matière à réflexion. La première solution est à mon avis plus complexe à mettre en oeuvre et moins logique que la seconde.
Dans tous les cas il faudrait te baser sur un contrôle session / cookie, et éventuellement IP, afin que l'utilisateur soit en mesure de se reconnecter de suite.


Cordialement,


Kohntark -
0
cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011
19 sept. 2009 à 09:25
"Est ce grave qu'un utilisateur se connecte à plusieurs endroits ?"
Cyrilherve : j'imagine que tu te l'es posé et que la réponse est oui (pour quelles raisons ?)

"Faut il interdire une nouvelle connexion ou déconnecter l'ancienne ?"


- qu'un utilisateur se connecte a plusieurs endroits n'a rien de mauvais. ce qui est à mon avis peut etre dangereux est que deux utilisateurs utilise le mm compte. et la qlque soit la solution utilise on va dire que le mal sera deja fait(car forcement l'un des deux a un compte qui n'est pas lui), on poura pas l'empecher de l'utiliser. mais au moins a partir du controle qu'on aura mis sur pied le veritable proprio du compte saura que voila,, il n'st plus le seul a utilise son compte et le signaler a l'administrateur( qui poura le changer par exple): donc voila un peu resumer ma preocupation sur le point.

- faut deconnecter l'ancienne ou interdire la nouvelle : a se niveau moi je prends tout , a partir du moment je peux implementer la solution, et la j'ai mon editeur qui me regarde depuis ... no way
0
cyrilherve Messages postés 324 Date d'inscription dimanche 12 août 2007 Statut Membre Dernière intervention 26 août 2011
29 sept. 2009 à 11:31
resalut a vous ,
une solution simple a mon probleme
merci encore.

http://www.commentcamarche.net/forum/affich-14374308-controler-la-connexion-a-mon-application
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
29 sept. 2009 à 17:30
Salut,

Je n'ai pas relu complètement le présent thread mais je ne vois pas de différence notable avec ce qui t'avait été exposé ici.
Le script donné sur commentcamarche n'est pas mal, mais, comme le signale son auteur, n'est pas abouti. Le plus important reste les problèmes de sécurité (injection sql, possibilité de déconnecter tous les clients, etc ...). Le fait d'inclure l'IP est à mon avis une mauvaise idée (tout le monde n'est pas en IP fixe), la var $md5 ne sert probablement à rien (cf session_id), ...

Cordialement,


Kohntark -
0
Rejoignez-nous