|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : mars 2007 Messages : 42 ![]() |
Bonjour à tous,
voici mon problème: Je dois faire une application web utilisant les sessions, lors d'un connexion je renseigne une table avec l'heure la date etc... et lorsque l'utilisateur ferme sa session je dois renseigner la table avec la durée de la session. Lorsque l'uilisateur clic gentillement sur "fermer session" il n'y a aucun problème mais s'il ferme son navigateur ça crain j'ai pensé à inserer une frame qui reste toujours ouverte avec un "<body onUnLoad = maFonction();>" mais je dois retravailler tout le site pour que la frame soit présente. Avez-vous une autre solution? Merci |
|
|
00
|
|
|
#2 |
|
Membre du Club
![]() Inscription : août 2005 Messages : 171 ![]() |
Première chose : AHHHH nan, pas de frames! Ce mot là ne devrait pas exister
Seconde chose : En effet, il est à ma connaissance impossible de fermer une session lorsque le navigateur se ferme. En effet, il s'agit là d'une action coté client. Le serveur n'en est donc pas conscient. Or le code PHP, c'est coté serveur. De plus, même si c'était possible, ce ne serait pas fiable : il suffirait que ton internaute quitte ton site sans fermer son navigateur (saisie d'une nouvelle URL, clic sur un des sites en marque-page etc), et tu reviens à ton problème initial. La solution meilleur solution d'après moi (assez lourde), serait simplement de mettre à jour le champs "heure_deco" de ta table à chaque chargement de page, avec l'heure actuelle. Ainsi, lorsqu'il quitte le site, bah tu as l'heure du chargement de sa dernière page. Tu peux utiliser une variable de session afin de vérifier qu'il s'agit toujours de la même session : si cette variable existe, tu mets à jour ton champs "heure déco", sinon tu crées un nouveau tuple dans ta table puisqu'il s'agit d'une nouvelle session, et tu initialise ta variable de session. Le soucis, mais là je doute que tu y puisse grand chose, est que tu mesures le temps entre le premier et le dernier chargement de page. Si ton internaute reste 10mn sur la dernière page avant de quitter ton site, tu ne le sauras pas. De même, s'il vient, va voir autre chose sur un autre site, et revient sur le tient avant que ta variable de session n'aie expiré, tu ne le sauras pas non plus. Enfin, si ton internaute reste trop de temps sur une même page (par exemple il y a un super long texte à lire), et que ta variable de session expire, tu auras l'impression que ton client est venu 2 fois distinctes, sans que ce soit le cas. Mais bon, ce sont là des cas relativement rare je crois, ce qui n'influencera pas ennormément tes statistiques, à mon avis. J'espère t'avoir un peu éclairé! |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : mars 2007 Messages : 42 ![]() |
Merci pour ta réponse,
je pense que je vais faire ça, mettre à jour la variable de session à chaque chargement de page, puis sur le serveur lancer un script php qui regarde les sessions ouverte et celles qui n'existent plus, les inscrires dans la base. Merci pour ton aide! |
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() Inscription : mars 2007 Messages : 42 ![]() |
Mais question bête...pourquoi pas de frame?...
|
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : août 2005 Messages : 171 ![]() |
|
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : mars 2007 Messages : 42 ![]() |
Donc ce que je vais faire au final c'est un script qui va parcourir les sessions (comment récupérer les sessions? comment savoir si elles existent encore? avec l'id que je stock dans une base...) et puis ce script je le lance toutes les 5min grace à crontab.
Vous en pensez quoi? et comment je sais si la session existe encore grace à son id? Merci! |
|
|
00
|
|
|
#7 |
|
Membre habitué
![]() Inscription : mai 2007 Messages : 131 ![]() |
Bonjour,
Les sessions sont sauvegardées dans un répertoire temporaire (voir session.save_path dans php.ini). Ces fichiers contiennent les variables de session, rien de plus. Le mieux, comme le dit ChriGoLioNaDor, est de mettre à jour un champ date/heure (dernière mise à jour) dans la bdd à chaque page. Ensuite, un script examine les enregs qui n'ont pas de date/heure de fin de session, et si la dernière maj est plus vieille que session.cache_expire, on met à jour la date/heure de fin de session (= dernière maj + session.cache_expire). edit : pour limiter l'imprécision et augmenter la sécurité, il faut baisser la valeur de session.cache_expire (par défaut = 180, 3 heures ...). On peut mettre 30, voire moins ... |
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Inscription : mars 2007 Messages : 42 ![]() |
d'accord merci pour les réponses!
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com