une connexion par personne?

Eléphant du PHP | 108 Messages

12 sept. 2006, 15:09

si je fais un script qui se lance tous les 5 min qui verifie les inactivités de plus de 3600sec, la personne qui se sera connecte puis fermer son navigateur ne pourra pas se reconnecter avant 1h car quand il essaiera, le script qui verifie si il y a deja une connexion ( champ = 1), lui dira qu'il est encore connecte pendant la periode des 3600sec a partir de sa derniere activite sur le site!

Donc il me reste plus que la solution du onclose!

Eléphant du PHP | 332 Messages

12 sept. 2006, 15:32

Oui, il faut que tu regardes comment tu peux lancer php.exe en lui passant comme paramètre le nom de ton script.

C'est faisable, il y a peut-être des variables PATH à positionner pour que Windows trouve son chemin.

Après tu inscrit ça dans le gestionnaire de tâches toutes les x minutes et ça devrait rouler.

Eléphant du PHP | 332 Messages

12 sept. 2006, 15:41

si je fais un script qui se lance tous les 5 min qui verifie les inactivités de plus de 3600sec, la personne qui se sera connecte puis fermer son navigateur ne pourra pas se reconnecter avant 1h
Sur le même poste, pourquoi pas ? Il faudrait à ce moment-là travailler avec des cookies. Mais ça devient vraiment complexe.

Autre idée : tu mets ton site dans un système de frameset avec une frame de 1 pixel de large (ou 1 pixel de haut).

La page incluse dans cette frame "invisible" est une page PHP qui se rafraichit toutes les 5 minutes et qui met à jour ta base de données en indiquant que l'utilisateur est toujours actif.

Si le type laisse son browser allumé : la page continue à se rafraichir toutes les 5 minutes. C'est le système décrit plus haut qu'il faut alors tester pour savoir s'il est encore actif ou pas.
Si le type ferme son browser : la page n'est plus rafraichie. Et donc cette fois tu peux détecter la fermeture au bout de 10 minutes.

Mais encore une fois, aucune solution n'est vraiment satisfaisante. Le bon vieux transactionnel ou le client/serveur nous manquent parfois :cry: quand on ouvrait une sessionutilisateur au début du programme et qu'on la fermait à la fin du programme.

Eléphant du PHP | 108 Messages

12 sept. 2006, 15:54

oui mais si il ferme son navigateur, la requete permettant de mettre a jour le champ a 0 ne pourra quand meme pas s'executer!

Eléphant du PHP | 332 Messages

12 sept. 2006, 16:06

Tout à fait exact. Mais tu n'es plus obligé d'attendre une heure.

Dans ta frame invisible (ou peu visible), rien ne t'empêche de faire une maj de la base toutes les 30 secondes. Cela ne gêne pas l'utilisateur puisqu'il travaille dans une autre frame du frameset et qu'il y fait défiler ses pages.

Si ton script va scruter la base toutes les minutes, le maximum de temps entre la fermeture du browser et le lancement du script de vérification est d'une minute et demi. Donc si tu effaces tout ce qui est supérieur à 2 minutes, tu es OK.

Eléphant du PHP | 108 Messages

12 sept. 2006, 16:21

excuse moi mais je suis pas sur d'avoir tout compris!
(ca sent la fin de journee!) :)

1er script Dans la frame invisible, je fais la mise a jour de l'heure et du champ CONNECTE = 1 toute les 30sec!

Apres je fais un script qui calcul la difference de temps entre maintenant et la derniere heure d'activite qui se lance toutes les 1min par le gestionnaire des taches de windows ou Webcron.

c'est bien ca?

si c'est ca, je ne peux pas reactualise ma page sans passer par une frame?

Eléphant du PHP | 108 Messages

13 sept. 2006, 09:35

donc est ce que je peux le faire sur ma page principale le refresh sans faire une frame?

quel est l'avantage de la frame?

Eléphant du PHP | 332 Messages

13 sept. 2006, 16:43

Le but de cette page, c'est de refaire une action sur le serveur et la base de données.

Tu peux le faire sur la page principale si tu veux : mais ça ne va pas plaire à l'internaute qui va voir sa page se recharger toutes les 30 secondes. :lol:

C'est pour ça qu'on le fait dans un frameset :
- une frame : les pages de ton site
- une frame presque invisible (1 pixel de large) : la page qui se recharge toutes les 30 secondes (c'est un exemple) pour mettre à jour la base.