JeuWeb - Crée ton jeu par navigateur
Actions autour des SESSION - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Actions autour des SESSION (/showthread.php?tid=4643)

Pages : 1 2


Actions autour des SESSION - Argorate - 14-03-2010

Bonjour,

J'aimerais savoir deux petites choses:

La première serait: est-il possible d'intercepter l'événement lorsqu'un internaute va pour fermer son navigateur?
Ou encore, est-il possible d'appeler un script lorsqu'on coupe une session (notamment en fermant le navigateur?)

J'ai bien peur de connaitre les réponses pour ces questions Sad

Deuxième chose, ce serait de savoir comment obtenir la liste des sessions en cour? (autrement dit qui est connecté? en temps réel...)

Merci.


RE: Actions autour des SESSION - Allwise - 14-03-2010

Pour la deuxième chose, si tes sessions sont enregistrées en BDD, il suffit de regarder le nombre d'enregistrements de la table qui les gère. Si c'est géré avec des fichiers ( comportement par défaut ) pareil, tu comptes le nombre de fichiers. Mais il faut alors que ceux-ci soient isolés dans un répertoire où il n'y a que les fichiers de session, et faut aussi avoir accès à ce dossier.

Pour la 1ère il y a l'événement javascript unload :
Citation :Se produit lorsque le navigateur de l'utilisateur quitte la page en cours
C'est souvent utilisé sur les sites poubelles qui regorgent de pub et qui foutent un alert ou autre au moment où on veut quitter la page, histoire d'être encore plus lourds.
Et sinon je sais pas s'il existe un moyen d'intercepter la destruction d'une session, si c'est cela même que tu cherches à faire j'sais pas, si c'est autre chose et que tu penses que c'est un moyen d'y arriver, faudrait que tu donnes des explications sur ton besoin pour qu'on puisse proposer des solutions, peut-être différentes.


RE: Actions autour des SESSION - Sephi-Chan - 14-03-2010

Je ne crois pas qu'il soit possible de suivre l'état d'une session avec des observateurs.

De façon un peu détournée, tu peux simplement stocker la date de la dernière action de l'utilisateur sur chaque page. Ainsi, tu considères qu'un membre qui n'a pas agit de puis 3 minutes (je dis ça arbitrairement) est déconnecté.

Le coup de l'événement unload de Javascript risque de poser problème dans les cas où un utilisateur ouvre plusieurs onglets sur ton site.


Sephi-Chan


RE: Actions autour des SESSION - php_addict - 14-03-2010

(14-03-2010, 12:31 PM)Sephi-Chan a écrit : De façon un peu détournée, tu peux simplement stocker la date de la dernière action de l'utilisateur sur chaque page. Ainsi, tu considères qu'un membre qui n'a pas agit de puis 3 minutes (je dis ça arbitrairement) est déconnecté.

je me permet une petite question annexe (désolé si cela pose probleme):

pour l'enregistrement du dernier timestamp, est ce une bonne idée de le mettre dans un champs 'dernier_time_stamp' sur l'entrée de l'utilisateur dans la base de donnée ou faut t il créer un TABLE annexe genre "memory heap" ?

car faire un UPDATE de l'entrée 'utilisateur' c'est un peu lourd non ?


RE: Actions autour des SESSION - Sephi-Chan - 14-03-2010

Je ne pense pas qu'un update ciblé sur une personne soit lourd, même à chaque chargement de page.
Sinon, la possibilité de créer une table de type Memory et y stocker une paire user_id, last_activity_at.


Sephi-Chan


RE: Actions autour des SESSION - Argorate - 14-03-2010

En fait il me faut faire une tache lorsque le joueur part.
Donc le mieux serait encore effectivement de rajouter un timestamp de la derniere action effectué. le probleme de cette methode, c'est qu'il faut mettre des UPDATE sur toutes les pages du site. car imaginons que le joueur pars 5min voir les regles, il est pas vraiment parti.

M'enfin ça doit etre gérable^^


RE: Actions autour des SESSION - Sephi-Chan - 14-03-2010

(14-03-2010, 03:46 PM)Argorate a écrit : En fait il me faut faire une tache lorsque le joueur part.
Donc le mieux serait encore effectivement de rajouter un timestamp de la derniere action effectué. le probleme de cette methode, c'est qu'il faut mettre des UPDATE sur toutes les pages du site. car imaginons que le joueur pars 5min voir les regles, il est pas vraiment parti.

M'enfin ça doit etre gérable^^

Encore une force de la POO (et des frameworks).


class ApplicationController < ActionController::Base
# Hop, c'est fait pour tout le site !
after_filter Confusedet_last_activity

def set_last_activity
current_player.last_activity = Time.now
current_player.save!
end
end

Enfin, je dis ça mais Authlogic détecte la présence d'une colonne last_activity_at et gère ça automatiquement. Confusediffle:


Sephi-Chan


RE: Actions autour des SESSION - Aleskweb - 14-03-2010

On peut pas effectuer une action quand le joueur part, mais comme tu l'a dit, sa passe par le timestamp, donc choisit une longueur (5 min c'est court mais c'est la durée générale). Car quand tu part 5 minutes voir les règles, tu n'est plus en train de jouer donc tu n'est plus actif. Et puis quand il reviendra il rechargera une page du site donc sera actif.
Ce qui me chiffonne c'est que tu va faire un Count x where dernier_timestamp = (time()-60*5).
Si il y a (très) beaucoup de joueur sa risque pas d'être une peu long avec chaque joueur a traiter???


RE: Actions autour des SESSION - Argorate - 14-03-2010

Ma foi, un count et un update éventuel, c'est pas énorme^^
Surtout que je peux optimisé le probleme en m'occupant uniquement des joueurs présents sur la zone où est le joueur (ce qui dans mon cas réduit concidérablement le travail^^)


RE: Actions autour des SESSION - Aleskweb - 14-03-2010

Ben un count pour filtrer ceux qui sont actifs les 5 dernières minutes dans les jeux comme travian avec 120 000 joueurs sa doit etre long. Doit y avoir une autre solution qu'ils utilisent