Session et statut

Résolu
kopierreko Messages postés 139 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 10 juillet 2010 - 27 déc. 2008 à 13:42
kopierreko Messages postés 139 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 10 juillet 2010 - 27 déc. 2008 à 21:34
Bonjour,
Je travaille avec les sessions pour mon site afin de montrer les utilisateurs en ligne.
Donc lors de la connexion, j'applique une UPDATE sur la base de donnée, l'utilisateur est donc en ligne.
Le problème est pour la déconnexion ... si  l'utilisateur ne se déconnecte pas manuellement, comment faire pour que la requête sql s'applique quand même ?

Merci

7 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
27 déc. 2008 à 14:17
Salut,

Plusieurs solutions.
Ce que je ferai :
Lors de la connexion, et de toutes les pages vues, UPDATE de la DB avec timestamp du dernier signe de vie.
Ensuite purge des enregistrements dont le timestamp est inférieur à XX secondes, initiée par les requêtes des autres visiteurs.

Cordialement,

Kohntark -
3
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
27 déc. 2008 à 20:10
Salut,

@kopierreko = > tu n'es pas obligé de répéter ce que je venais d'écrire

Ton script ne fonctionnera pas correctement, nottament avec la $tt_s qui ne représente rien.
=>
<?php
session_start();
include('conf.php');
mysql_connect($host, $id, $psw);
mysql_select_db($bdd);
$id_m = $_SESSION['id'];

if (isset($_SESSION['pseudo'])) {
 
  $id = $_SESSION['id'];
  $timestamp_n = mktime();
  $temps_deco = $timestamp_n - 120;

  mysql_query("UPDATE membres SET time_co='$timestamp_n' WHERE id='$id'");
  $rech = mysql_query("SELECT * FROM membres");
 
  while ($r = mysql_fetch_array($rech, 'MYSQL_ASSOC')) {
    $id_c = $r['id'];  
    $t = $r['time_co'];  
    $p = $r['pseudo'];
 
    if ($t < $temps_deco) {
      $etat = "hors ligne";
    } else {
      $etat="en ligne";
    }
  }
}

mysql_query("UPDATE membres SET co='0' WHERE id='$id_c'");
=> à quoi ça te sert de faire une requête pour marquer le membre en/hors ligne alors que tu disposes du timestamp ? Sauf à avoir 5000 membres sur ton site ça ne sert pas à grand chose.
$temps_deco '30';> ça fait un peu limite non ? J'aurai plutôt vu un 120 à la place. Bon, ok, ça dépend du type de site que tu as. Menfin franchement, si tu as ne serait ce que 20 lignes de texte, je serai déco avant d'avoir fini la lecture.

Cordialement,

Kohntark -
3
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
27 déc. 2008 à 14:19
... tu n'es pas obligé de purger d'ailleurs, mais tu affiches seulement les membres avec un timestamp < XX sec. Menfin tout ça est à adapter à ta structure.

Kohntark -
0
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
27 déc. 2008 à 14:19
...je ne sais pas exactement comme ta BDD est structurée mais tu peux faire le tout avec un timestamp et ne prendre en compte que les entrées récentes, et par ex. considèrer que l'utilisateur n'est plus en ligne après une inactivitée de 15min...

Si tu pouvais détailler un peux je pourrais peut-être en dire plus.

Bonne journée

<hr size="2" width="100%" />Some Geek: Tous les programmeurs sont des brutes, [...] ils violent chaque ligne, chaque language [...] et n'on aucun goût pour la beauté de ./sh

Pysco68:
0

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

Posez votre question
kopierreko Messages postés 139 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 10 juillet 2010
27 déc. 2008 à 16:07
C'est pas une mauvaise idée c'est vrai ^^
Je vais essayer
0
kopierreko Messages postés 139 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 10 juillet 2010
27 déc. 2008 à 19:26
Voilà donc le résultat:

<?php
session_start();
include('conf.php');
mysql_connect($host, $id, $psw);
mysql_select_db($bdd);
$id_m = $_SESSION['id'];
mysql_query("UPDATE membres SET co='1' WHERE id=' $id_m '");

if (isset($_SESSION['pseudo'])) {
$année = date(Y);
$mois = date(m);
$jour = date(j);
$heure= date(G);
$min =  date(i);
$s   =  date(s);       

$heures_s = $heure*3600;
$min_s = $min*60;
$tt_s = $s+$heures_s+ $min_s;

$timestamp_n = mktime($heure, $min, $s, $jour, $mois, $année);
         $temps_deco = '30';

$id = $_SESSION['id'];

mysql_query("UPDATE membres SET time_co=' $tt_s ' WHERE id ='$id'");
$rech = mysql_query("SELECT * FROM membres");

while ($r =mysql_fetch_assoc($rech)) {
    $id_c = $r['id'];   
$t = $r['time_co'];   
$p = $r['pseudo'];

if($tt_s-$t>=$temps_deco){
    $etat = "hors ligne";
    mysql_query("UPDATE membres SET co='0' WHERE id=' $id_c '");
} else {
$etat ="en ligne";
}
}
}
?>

J'ai finalement utilisé les secondes, c'est moins compliqué, je trouve.
Ce script marche très bien. Merci beaucoup de m'avoir aiguillé.Très sympa.
Bye
0
kopierreko Messages postés 139 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 10 juillet 2010
27 déc. 2008 à 21:34
J'ai mis 5 minutes pour la déco( j'avais mis là la version de test ).Très franchement, je n'ai pas l'habitude d'utiliser les timestamp et c'est pour ça que je travaille en secondes ^^
Merci beaucoup pour cette aide
Bye
0
Rejoignez-nous