Espace membre - détection de connexions multiples

Nouveau WRInaute
Bonjour,
je suis en train de développer un site qui aura un espace membre. Jusque là tout est OK: BDDet vérification login/pass, passage dans les variables des SESSION,...

L'accès au service membre est payant et je souhaiterais éviter que les utilisateurs ne distribuent leur identifiants à leurs amis.
Ce que je que je souhaite implémenter, c'est une détection de connexions multiples. Identifier si deux connexions sont simultanées avec le même compte mais deux IP différentes. Si c'est le cas, je déconnecte le premier en lui envoyant un messages "Connexion multiple....".

Je récupère:
- l'IP de l'utilisateur avec $ipClient = $_SERVER['REMOTE_ADDR'];
- l'ID de l'utilisateur via ma BDD $_SESSION['user_id'] = ...;

Là je coince, comment comparer les IP de deux sessions différentes qui seraient associées au même compte, sans surcharger le site avec de trop nombreuses reuêtes à la BDD.

Merci d'avance pour votre aide,
Antonio
 
WRInaute passionné
Bonsoir,

Je pense que pour toi la question semble claire parce que tu as la tête dedans, mais

- l'ID de l'utilisateur via ma BDD $_SESSION['user_id'] = ...

Est confus.

Peut-être pourrais-tu expliquer le schéma fonctionnel parce que je n'arrive pas à comprendre (oui je sais je ne suis pas une référence) :)
 
Nouveau WRInaute
Une partie des services proposés par le site Internet sera payant et de ce fait, réservé aux membres.

Pour les pages dont l'accès est limité, l'utilisateur doit être logué (identifié). Je fais une vérification dans la BDD. Si le login et le mot de passe correspondent, je mets une variable de session avec le No de l'utilisateur: $_SESSION['user_id']. Cette variable de session sera utile tout le long de l'utilisation du site.

je veux pouvoir détecter si plusieurs personnes sont loguées en même temps, en tant que même utilisateur. En passant par $_SESSION['user_id'] + les adresse IP, les identifiants de session, ou autre solution.
Par exemple (et juste pour l'exemple), si ma grand-mère s'inscrit, je ne veux pas qu'elle donne ses login/pass à tout son club de tricot. Je sais que ça ne l'empêchera pas de le faire, mais, si elle se fait déconnecter quant des copines sont aussi en ligne, ça pourra la motiver à cesser de partager l'info. [et non, je n'ai rien contre ma grand-mère].

J'espère avoir été plus clair et que vous pourrez me donner une piste de développement.
Antonio
 
WRInaute accro
si c'est juste éviter que 2 personnes utilisent le même code en même temps il te suffit d'ajouter un champs avec une date/heure de dernière connection et de considérer qu'au delà de 30' par exemple, le champ ne sera plus valable.
 
WRInaute passionné
Leonick a dit:
si c'est juste éviter que 2 personnes utilisent le même code en même temps il te suffit d'ajouter un champs avec une date/heure de dernière connection et de considérer qu'au delà de 30' par exemple, le champ ne sera plus valable.
5 secondes après la connexion réussie: essaye de te logguer en 5 secondes avec une autre fenetre ouverte...
 
Nouveau WRInaute
Si je fais une vérification de l'identification sur chacune de mes pages "membres", le dernier chargement de la page mettra à jour le champ "dernière connexion", la navigation sera possible par deux utilisateurs.
Je fais déjà ce genre de vérification pour mettre fin a une session inactive: si la personne ne navigue pas pendant plus de 15 minutes, il sera déconnecté.
 
WRInaute accro
leica69 a dit:
Si je fais une vérification de l'identification sur chacune de mes pages "membres", le dernier chargement de la page mettra à jour le champ "dernière connexion", la navigation sera possible par deux utilisateurs.
et dans l'intervalle dernière connexion à dernière connexion+30', tu interdits la connexion avec un autre id de session (transmis via cookie), voire, éventuellement, une autre ip
 
Nouveau WRInaute
Si j'ai bien compris.
L'utilisateur se logue: via le formulaire login/pass: -> j'enregistre la SESSION_ID dans la BDD

Lors du chargement de chaque page protégée, je vérifie le temps écoulé depuis la dernière connexion:
Plus de 30 minutes: Session inactive -> déconnexion
Moins de 30 minutes: je compare les SESSION_ID:
- c'est les mêmes -> tout va bien, on continue
- elles sont différentes (car une autre connexion a eu lieu entre temps) -> je déconnecte

Ca semble cohérent? Je n'oublie rien?
 
Nouveau WRInaute
Bonjour,
j'ai testé et ça fonctionne correctement. J'ai juste un (gros) souci avec Opera et Chrome.

La structure de mes pages est la suivante:
Code:
Logo
-------
Menu
------
** Si le membre est connecté: un menu membre **
------
Contenu de mes pages
Mon souci est que les pages affichées sont celles du cache du navigateur et non celles qui sont générées par le serveur. J'explique:
Quand un utilisateur "membre" est logué, il a un menu spécifique qui s'affiche sur toutes les pages (dans ma structure, ce qui est entre les **).
Quand il ferme sa session ou qu'il est kické, les pages qu'il a déjà visitées s'affichent avec le menu membre. Si j'actualise la page (F5), tout redevient normal, sans le menu membre.

Auriez-vous une idée pour résoudre ce problème? Existe-t-il un moyen de ne pas mettre les pages en cache?

D'avance, merci.
Antonio
 
Nouveau WRInaute
Code:
$no_session_courante = session_id();

$sql_session = "SELECT count(id) FROM t_membres WHERE id='".$_SESSION['user_id']."' AND membre_session_id='".$no_session_courante."'";
$req_session = mysql_query($sql_session) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$ligne_session = mysql_fetch_row($req_session);
mysql_free_result($req_session);

if ($ligne_session[0] != 1) {
	//Conflit de SESSION
	unset($_SESSION['last_access']);
	unset($_SESSION['user_id']);
	session_unset();
	session_destroy();
	
	header("Location: erreur.php?e=2");
}
 
Discussions similaires
Haut