par
agité » 22 mai 2006, 16:04
Bonjour,
J'ai déjà creer des sessions sur ma base de donnée mais je me rends compte que j'ai pas mal de problème, je n'avais pas de temps de session mis alors j'ai recuperer un script sur le site du zero :
http://www.siteduzero.com/tuto-3-174-1- ... ectes.html
Par contre ce que j'aimerais maintenant c'est que lorsqu'il supprime l'entrée de la table il ferme aussi la session car je peux continuer de naviguer alors que la session est consideré comme morte pourtant j'ai fais ca :
<?php
$retour = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM sessions WHERE ip='".$_SERVER['REMOTE_ADDR']."' ");
$donnees = mysql_fetch_array($retour);
if (isset($_GET['phpsessid'])) {
if ($donnees['nbre_entrees'] == 0) // L'ip ne se trouve pas dans la table, on va l'ajouter
{
$sql = "INSERT INTO sessions (ip,timestamp,nom,sessid) VALUES ('".$_SERVER['REMOTE_ADDR']."', '".time()."', '".$_SESSION['login']."', '".$_SESSION['session_id']."') ";
$request = mysql_query($sql) or die ("erreur ".$sql);
}
else // L'ip se trouve déjà dans la table, on met juste à jour le timestamp
{
$sql = "UPDATE sessions SET timestamp= '".time()."', nom = '".$_SESSION['login']."', sessid = '".$_GET['PHPSESSID']."' WHERE ip= '".$_SERVER['REMOTE_ADDR']."' ";
$request = mysql_query($sql) or die ("erreur ".$sql);
}
// -------
// ETAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 5 minutes
}
// On stocke dans une variable le timestamp qu'il était il y a 5 minutes :
$timestamp_5min = time() - (60 * 5); // 60 * 5 = nombre de secondes écoulées en 5 minutes
$sqm ="DELETE FROM sessions WHERE timestamp < '".$timestamp_5min."' ";
while (mysql_query($sqm) != false)
{
session_start();
session_destroy();
}
// -------
// ETAPE 3 : on compte le nombre d'ip stockées dans la table. C'est le nombre de visiteurs connectés
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM sessions');
// Ouf ! On n'a plus qu'à afficher le nombre de connectés !
echo "<b>".$donnees['nbre_entrees']."</b>";
?>
j'ai verrifier que la session etait detruite comme ca :
$sqm ="DELETE FROM sessions WHERE timestamp < '".$timestamp_5min."' ";
while (mysql_query($sqm) != false)
{
session_start();
session_destroy();
}
pourtant il ne me detruit pas la session je peux continuer de naviguer
Bonjour,
J'ai déjà creer des sessions sur ma base de donnée mais je me rends compte que j'ai pas mal de problème, je n'avais pas de temps de session mis alors j'ai recuperer un script sur le site du zero :
http://www.siteduzero.com/tuto-3-174-1-tp-nombre-de-visiteurs-connectes.html
Par contre ce que j'aimerais maintenant c'est que lorsqu'il supprime l'entrée de la table il ferme aussi la session car je peux continuer de naviguer alors que la session est consideré comme morte pourtant j'ai fais ca :
[php] <?php
$retour = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM sessions WHERE ip='".$_SERVER['REMOTE_ADDR']."' ");
$donnees = mysql_fetch_array($retour);
if (isset($_GET['phpsessid'])) {
if ($donnees['nbre_entrees'] == 0) // L'ip ne se trouve pas dans la table, on va l'ajouter
{
$sql = "INSERT INTO sessions (ip,timestamp,nom,sessid) VALUES ('".$_SERVER['REMOTE_ADDR']."', '".time()."', '".$_SESSION['login']."', '".$_SESSION['session_id']."') ";
$request = mysql_query($sql) or die ("erreur ".$sql);
}
else // L'ip se trouve déjà dans la table, on met juste à jour le timestamp
{
$sql = "UPDATE sessions SET timestamp= '".time()."', nom = '".$_SESSION['login']."', sessid = '".$_GET['PHPSESSID']."' WHERE ip= '".$_SERVER['REMOTE_ADDR']."' ";
$request = mysql_query($sql) or die ("erreur ".$sql);
}
// -------
// ETAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 5 minutes
}
// On stocke dans une variable le timestamp qu'il était il y a 5 minutes :
$timestamp_5min = time() - (60 * 5); // 60 * 5 = nombre de secondes écoulées en 5 minutes
$sqm ="DELETE FROM sessions WHERE timestamp < '".$timestamp_5min."' ";
while (mysql_query($sqm) != false)
{
session_start();
session_destroy();
}
// -------
// ETAPE 3 : on compte le nombre d'ip stockées dans la table. C'est le nombre de visiteurs connectés
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM sessions');
// Ouf ! On n'a plus qu'à afficher le nombre de connectés !
echo "<b>".$donnees['nbre_entrees']."</b>";
?>[/php]
j'ai verrifier que la session etait detruite comme ca :
[php] $sqm ="DELETE FROM sessions WHERE timestamp < '".$timestamp_5min."' ";
while (mysql_query($sqm) != false)
{
session_start();
session_destroy();
} [/php]
pourtant il ne me detruit pas la session je peux continuer de naviguer