Récupérer les sessions et IP actives

Bonjour,
Existe-t-il un moyen de récupérer via un script ou autre, l’adresse IP d’un utilisateur spécifique qui dispose d’une session active ?
Dans l’idéal, ça serait quelque chose du genre : [nom_utilisateur_1][IP].
Je sais que Jeedom est capable d’obtenir cette information puisqu’on la voit dans l’écran Système/Utilisateurs.
Mais je ne sais pas comment récupérer l’information pour l’exploiter. Il faudrait que l’IP puisse servir de déclencheur pour un scénario, et que je puisse déconnecter l’utilisateur suivant la nouvelle valeur de l’IP.
Est-ce que quelqu’un saurait faire ce genre de choses ?
Merci d’avance pour votre aide

Bonsoir avec un bloc code

$ses = "\n-- OLIVE PROD --\n";
$sessions = listSession();
$nbSessions=count($sessions);
$userSession = 0;
foreach($sessions as $id => $session){
	$userSession++;
    $ses .= $session['login'] . " " .$session['datetime']."\n";
}
$ses.= "\n";
$scenario->setLog($ses);
$tags['#lastlogin#'] = $ses;
$scenario->setTags($tags);

ne te reste plus dans ton scenario de traiter le tag

#lastlogin#

en extra:
$session['datetime']
$session['ip']

bonne soirée
2 « J'aime »

Merci @olive pour ton aide, ça me permet de bien progresser…
Maintenant j’arrive à isoler la session qui m’intéresse, mais il me reste à trouver comment supprimer la session qui pose problème… Il y aurait un moyen ? genre $session->disconnect ?
Voici mon code modifié pour y voir plus clair :

$ses = "\n-- OLIVE PROD --\n";
$sessions = listSession();
$nbSessions=count($sessions);
$userSession = 0;
foreach($sessions as $id => $session){
	$userSession++;
  if ($session['login'] == 'toto' or $session['login'] == 'titi'or $session['login'] == 'tutu')
  {
    //On a isolé une session d'un utilisateur que l'on souhaite éventuellement déconnecter dans le if, maintenant on veut savoir s'il est bien en local (rien de particulier à faire), ou en wan (il faut le déconnecter)
    if (substr($session['ip'],0,10) == '192.168.1.')
    { $scenario->setLog('connexion depuis réseau local');
     $scenario->setLog($session['login'] . " " .$session['ip'] ."\n");
    }
    else
    {
      $scenario->setLog('connexion depuis extérieur');
      $scenario->setLog($session['login'] . " " .$session['ip'] ."\n");
     //Reste à trouver comment déconnecter la session : $session
    }
    

  }
  else
  {
    //utilisateur que l'on ne souhaite pas déconnecter, rien de particulier à faire
  }
    
}
$ses.= "\n";
$scenario->setLog($ses);
$tags['#lastlogin#'] = $ses;
$scenario->setTags($tags);

Merci et bonne soirée également

Hello,

Tu as la méthode deleteSession qui prend en paramètre l’ID de session que tu as récupèré dans listSession()

2 « J'aime »

Wouah… Merci à vous deux pour les conseils (je suis embêté pour attribuer le résolu à l’un ou à l’autre :wink:)… Alors pour ceux qui comme moi pataugent un peu, la ligne que j’ai ajouté au niveau de mon commentaire qui disait qu’il restait à trouver comment déconnecter la session est :

 deleteSession($id);

Et ça marche du feu de dieu avec un petit cron chaque minute… Vraiment merci…
Après, plutôt qu’un cron, y’aurait pas moyen d’avoir pour déclencheur le fait que la liste des sessions actives a changé ? (Bon là, c’est vraiment pour de l’opti parce que ça fonctionne comme je voulais en l’état)…

1 « J'aime »

#user_connect#

Merci, cela semble fonctionner quand un nouvel utilisateur se connecte, mais pas quand il change simplement d’IP. Or c’est ce comportement que je souhaiterais utiliser comme déclencheur…

Je peut me tromper mais un utilisateur ne peut pas changer d’IP pendant une session …
il doit se reconnecter …

Justement si (du moins s’il a enregistré l’appareil, je n’ai pas vérifié dans le cas contraire)… Et je pense que le Core doit avoir un problème à ce niveau, et c’est pour ça que je cherche à contourner le problème…
En fait, j’ai des utilisateurs configurés en « Local ». Sauf que si on a un smartphone, qu’on se connecte en local (via le wifi) en enregistrant l’appareil et qu’ensuite, on se met sur le réseau mobile du smartphone, et bah Jeedom n’y voit que du feu. Il prend bien en compte la nouvelle IP de l’utilisateur, mais il le laisse connecté alors qu’il n’est plus en local…
J’avais lancé ce thread il y a quelques temps :
https://community.jeedom.com/t/utilisateur-local-et-changement-de-reseau/56178
@Mips avait vu un peu le problème avec moi, et ça persiste donc je voudrais un workaround en attendant…
Après, je peux lancer le scénario chaque minute… Au pire, l’utilisateur pourra continuer à utiliser sa session jusqu’à 1 minute après avoir basculé sur un autre réseau, donc il ne devrait pas être si loin de la maison que ça… :wink:
Dans tous les cas, un immense merci pour m’avoir donné une solution viable…

A priori, l’instruction jeedom::event('user_connect'); qui permet l’action du déclencheur #user_connect# sur nos scénarios n’est présente qu’à deux endroits dans le core :

/var/www/html/core/class/user.class.php:ligne 127:
/var/www/html/core/class/user.class.php:ligne 150:

et qui correspond à un login réussi.

Il faudrait qu’elle soit aussi utilisée dans le core lors de la découverte d’une session active pour pouvoir déclencher le scénario.

1 « J'aime »