une connexion par personne?

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 : une connexion par personne?

par Henri » 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.

par sasg » 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?

par sasg » 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?

par Henri » 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.

par sasg » 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!

par Henri » 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.

par Henri » 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.

par sasg » 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!

par sasg » 12 sept. 2006, 14:55

donc la restrucutuation passe par la mise en place du gestionnaire de tâches de windows pour faire ca toute les x min?

par sasg » 12 sept. 2006, 14:52

merci a toi Henry, on peut dire que mainteant que ce post est clos et resolu!

Merci encore!

par Henri » 12 sept. 2006, 14:37

Non, il n'y a pas de moyen d'obliger la personne à se déconnecter. La seule solution est donc de structer régulièrement la base (toutes les 5 minutes par exemple) et de virer toutes les connexions inactives depuis 1 heure.

En fait, si, il y a un moyen de faire, mais il est assez inélégant.
Tu mets en place sur toutes tes pages un script qui se déclenche sur la fermeture du browser (événement onclose à mettre sur le body). Sur cette fermeture, tu rediriges l'internaute vers une page de déconnexion.

par sasg » 12 sept. 2006, 14:24

je travaille sous mysql, la fonction qui dit si il y a une difference de plus de 3600 , je met a 0 le champ dans la base est deja fait. elle fonctionne tres bien et j'en suis fier :D :wink: !

mais le probleme c'est qu'il n'y pas de mise a jour qui se fera si la personne ferme son navigateur.

par Henri » 12 sept. 2006, 14:19

Si tu as une base de données sur laquelle tu peux lancer des tâches programmées (type Oracle), tu fais une fonction qui se lance régulièrement et qui vide les connexions supérieures à 3600.

Sinon tu écris un script PHP qui va faire la même chose et que soit tu peux lancer dans la crontab Linux (ou le gestionnaire de tâches Windows) du serveur, soit faire exécuter à intervalles réguliers par www.webcron.org

par sasg » 12 sept. 2006, 14:00

j'ai un autre petit probleme :?

dc dans ma base, je met un champ a 1 si il est connecte, et chaque page je calcul la difference de ce temps mis a jour a chaque page au temps de "maintenant", si la diffrence est superieur a 3600 sec, il deconnecte la personne en passant le champs a 0.

Mais si la personne ferme son navigateur la requete ne sera jamais executer!
et donc si il revien sur la page de connexion le champs sera toujours a 1!

comment faire quand il revient sur la page de connexion que ce chmps vienne a 0?

par Henri » 12 sept. 2006, 13:13

Ce serait donc peut-être 24 minutes d'inactivités qui remettent à null ma valeur $_SESSION["SESSION_ID"] et qui donc provoque le retour en page de login.

Mais je ne vois pas l'intérêt de garder les données 24 minutes et les pages 3 heures. La différence de temps est franchement disproportionnée.

Si un expert des sessions passe par ici, ses explications sont les bienvenues.