Session et Logout sauvage

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Session et Logout sauvage

par yaug » 06 janv. 2008, 00:41

Hum..
J'aurais plutot fait comme ceci :
<?php
// Connexion à MySQL
mysql_connect("localhost", "sdz", "mot_de_passe");
mysql_select_db("php"); 

$now = $_SERVER['REQUEST_TIME'];

//On met a jour la liste des membres qui ne sont pas connecté depuis 5 minutes
$requete = mysql_query('Update Membre SET Statut_enligne = 0 WHERE timestamp + 300 < ' . $timestamp); 

//On vérifie si le timestamp de la session a été fixé,
//Ou si le timestamp est dépassé. si ce n'est pas le cas, on place le timer
// et on log dans la bdd.
if(!isset($_SESSION['connect_time'] || $now - $_SESSION['connect_time'] > 300){
$_SESSION['connect_time']=$now;
mysql_query("Update Membre SET Statut_enligne = '1', timestamp='$now' WHERE user_id='$user_id'");
//log dans la bdd
}

//On liste les utilisateurs présents
$requete = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM Membre WHERE Statut_enligne = 1");
$resultat = mysql_fetch_array($requete);

echo $resultat 'membres en ligne'; 
}
?>
Car il faut bien, à un moment donné, signaler que tel utilisateur se log sur le site.

par Foulensois » 06 janv. 2008, 00:19

Si j utilise ce petit script que je viens de confectionner selon la methode Yaug, sera t il assez performant pour faire la mise a jour du statut online/offline ?
<?php
// Connexion à MySQL
mysql_connect("localhost", "sdz", "mot_de_passe");
mysql_select_db("php");

// ETAPE 1 : on supprime toutes les entrées dont le timestamp est plus vieux que 30 minutes
// On stocke dans une variable le timestamp qu'il était il y a 30 minutes :
$timestamp = time() - (60 * 30); // 60 * 30 = nombre de secondes écoulées en 30 minutes
$requete = mysql_query('Update Membre SET Statut_enligne = 0 WHERE timestamp < ' . $timestamp);


// ETAPE 2 : on vérifie si le membre inscrit a le statut online
//On compte le nombre d entrees ou le statut online est egal a 1 dans la table Membre
$requete = mysql_query("SELECT COUNT(*)  FROM Membre WHERE Statut_enligne = 1");
$resultat = mysql_fetch_array($requete);

echo $resultat 'membres en ligne';
?>

par Xenon_54 » 05 janv. 2008, 07:07

Ton problème ressemble au sujet abordé récemment sur ce forum:
http://www.phpfrance.com/forums/viewtopic.php?t=34973

Lis et analyse les réponses qui ont été données.

par Patriboom » 05 janv. 2008, 02:13

Je m'excuse de m'immiscer, mais j'ai déjà eu exactement les mêmes questions.

Une fois j'ai opté pour des cookies, quand je n'avais pas besoin de connaître le nombre de visiteurs en ligne. Cependant, il faut compter sur les utilisateurs qui refusent les cookies. C'est alors un peu plus compliqué. À cause de cela, l'autre fois j'ai opté pour une variable $_session. Chaque visite de page pourrait alors vérifier toutes les variable du tableau composées de la manière suivante: $_SESSION["date_heure_ip"] Les variable périmées étant excluses les visiteurs partis sauvagement perdraient leur trace. Aussi, à chaque page, chacun visiteur renouvellerait sa propre variable $_SESSION["date_heure_ip"] qui serait rendue unique par le ip

Tu peux encore utiliser utiliser MySQL, mais avec deux champs: un champ timestamp et un champ id ou ip

Il y a donc plusieurs possibilités, ce ne sont que quelques-unes qui sont ici.

par Aureusms » 05 janv. 2008, 02:12

En fait je ne veux pas exploiter le nombre de personnes en ligne. Je souhaite juste updater un champ mysql au bout de "x" minutes si le membre est parti en ne passant pas par deconnexion.php.
Seule issu Javascript sous AJAX...

par Foulensois » 05 janv. 2008, 01:45

En fait je ne veux pas exploiter le nombre de personnes en ligne. Je souhaite juste updater un champ mysql au bout de "x" minutes si le membre est parti en ne passant pas par deconnexion.php.

par yaug » 05 janv. 2008, 01:37

Hum..
Non.
Autant cela peut remplacer la session dans la base de donnée, autant on ne peut pas afficher le nombre de cookies/sessions ouvert.

Ton problème principale est que tu veux indiquer combien de personnes sont en ligne, mais pour cela il faut pouvoir exploiter quelque chose, ce qui n'est pas le cas des cookies.

par Foulensois » 05 janv. 2008, 01:33

J ai vu ce code sur la doc PHP, est il a vos yeux corrects pour eviter d avoir recours a 1 requete mysql ?
<?php
private function startSession($time = 3600, $ses = 'MYSES') {
    session_set_cookie_params($time);
    session_name($ses);
    session_start();

    // Reset the expiration time upon page load
    if (isset($_COOKIE[$ses]))
      setcookie($ses, $_COOKIE[$ses], time() + $time, "/");
}
?>

par yaug » 04 janv. 2008, 20:18

Je ne crois pas que cela soit possible en fait.

La meilleur solution que j'ai trouvé pour le moment, c'est de faire cela.

- Lors de la connexion, on enregistre la session de l'utilisateur dans la base.
- A chaque réouverture de page, on check si la session a plus de X minutes (par exemple 15), si c'est le cas on met à jour le champ dans la table.
- Sur le site tu ne sélectionne que les utilisateurs dont la session a par exemple moins de X minutes (ici 15).

Cela permet une assez bon suivit des sessions en ligne et corrige le problème de ne pas pouvoir enregistrer le départ de l'utilisateur.

Session et Logout sauvage

par Foulensois » 04 janv. 2008, 19:55

Bonjour a tous,

J ai un petit souci et je ne vois pas comment le regler.
Lors de l identification d un membre, j initialise la session et j update un champ dans Mysql pour faire passer le membre "en ligne".
Lorsqu il detruit sa session via un logout, le champ s update sans probleme et le membre devient "hors ligne"

Ma question porte sur le fait que je souhaiterais que ce champ Mysql s update meme si la personne ne fait pas un logout lors de sa sortie, c est a dire qu elle sorte de facon "pas propre" en fermant son navigateur ou en allant sur un autre site.

Peux t on initialiser une sorte de timestamp dans la duree de session quand on n a pas acces a la configuration du serveur ?

Merci de votre aide