mettre à jour un enregistrement de la base de donnée grâce au sessions

Petit nouveau ! | 6 Messages

26 nov. 2007, 17:29

Bonjour, sur un site web que je suis en train de construire, lorsque l'utilisateur se loggue, un enregistrement mysql contenant son login et la valeur en ligne se met a jour en passant enligne=1, lorsqu'il se déconnecte avec le bouton un script va supprimer cet enregistrement, je voudrais trouver une solution pour que cela fonctionne lorsqu'il ferme salement son navigateur, ou alors dans le pire des cas quand le temps de ca session est dépassé.

Donc si vous avez un peu de temps à me consacrer ca serait trés sympa merci

Eléphanteau du PHP | 32 Messages

26 nov. 2007, 17:35

Tu stocke la durée de session toi-même ?

Si oui tu peut effacer les sessions périmées a chaque fois que tu logues quelqu'un par exemple.

Sinon (mais là je ne m'y connais pas) tu doit pouvoir utiliser du javascript comme ceci :

Code : Tout sélectionner

<body OnUnLoad="javascript:detruireSession()">

Mammouth du PHP | 1511 Messages

26 nov. 2007, 17:35

Une des solutions les plus simple est un champ dont le timestamp est mis a jour a chaque page consultée.
Quand tu récupéres ce timestamp, tu regarde la différence entre la valeur actuelle du timestamp et la valeur stockée, et si elle est inférieur a un temps donné, l'utilisateur est considéré hors ligne ;)
@+

ViPHP
ViPHP | 5924 Messages

26 nov. 2007, 22:54

Tu stocke la durée de session toi-même ?

Si oui tu peut effacer les sessions périmées a chaque fois que tu logues quelqu'un par exemple.

Sinon (mais là je ne m'y connais pas) tu doit pouvoir utiliser du javascript comme ceci :

Code : Tout sélectionner

<body OnUnLoad="javascript:detruireSession()">
Euh non, pas du tout.
Utiliser du javascript dans ce cas est une abération. Le javascript peut être désactivé, intentionnellement ou non, et le navigateur de l'utilisateur peut planter, n'exécutant alors pas le code javascript, la connexion peut sauter, …
Bref, on ne se base pas sur une technologie peu fiable et totalement controlable par le client pour ce genre de problèmes, cad engageant la sécurité et le comportement du logiciel.

Par contre, l'idée du timestamp est très bonne, c'est un concept très utilisé, notament par les sessions PHP classiques.

Petit nouveau ! | 6 Messages

27 nov. 2007, 08:59

Merci de vos réponse, voila ce que j'ai fait, je remet a jour un champ time a chaque visite de page mais le probleme c'est que ca gere un temps d'inactivité mais si le user se deconnecte, il ne lance plus ce script que j'ai mis au début de chaque page, donc y me faut une solution pour lancer ce script toute les 10min par ex mais si je lance ce script à l'extérieur des pages vues par l'utilisateur, comment je récupère les variable de session propre à lui meme?

include ("deco.php"); 
define ('SESSION_TIMEOUT', "1800");
if(isset($_SESSION['user']))
{
if(time()-$_SESSION['last_access'] > SESSION_TIMEOUT)
  {
      logout();
}
 else
    {
        // On stocke l'heure de dernière connexion
        $_SESSION['last_access'] = time();
    }
[/code]

Petit nouveau ! | 6 Messages

27 nov. 2007, 09:14

Le probleme que j'ai aussi c'est qu'il y a une page ou l'utilisateur doit pouvoir rester des heures dessu sans actualisé et sans cliquer nul par, la solution qui correspondait bien a ce que je voulais faire était le javascript mais si c'est si peut fiable...

ViPHP
ViPHP | 5924 Messages

27 nov. 2007, 11:21

Tu dois nettoyer les enregistrements obsolètes à chaque page.
Et concernant la page spéciale, soit tu règles le temps de connexion en conséquence, soit tu fais une réactualisation péridioque de la page, soit tu revois ton système, mais il n'y a pas vraiment beaucoup d'autres solutions…

Petit nouveau ! | 6 Messages

27 nov. 2007, 11:51

pour nétoyer les enregistrement obselete,il me faut savoir les sessions actives et les sessions non active de mon serveur,

car je voulais faire queleque chose du genre:

je récupère toutes les session non active et je met la valeur a 0 dans ma table mysql

Petit nouveau ! | 6 Messages

27 nov. 2007, 11:52

ou alors est-ce qu'il y a un moyen de faire éxécuté a apache un script lorsqu'il détruit une session?

ViPHP
ViPHP | 5924 Messages

29 nov. 2007, 04:08

je récupère toutes les session non active et je met la valeur a 0 dans ma table mysql
Si tu as un enregistrement par session, tu vas saturer ton serveur. Pour nettoyer les sessions, on supprime tous les enregistrements obsolètes.

Et non on ne peut pas exécuter un script lors du nettoyage des sessions par php.