OVH Cloud OVH Cloud

deconnexion

12 réponses
Avatar
ste
Salut à tous,

Est-il possible de savoir quand un client se deconnecte physiquement du
serveur
apache (quand le client ferme son browser quoi :))

Je suis en train de faire une extension php sous win32 avec apache et je
n'ai pas
vu de message particulier pour ce genre d'action...


Merci d'avance

a++

10 réponses

1 2
Avatar
Olivier Miakinen

Est-il possible de savoir quand un client se deconnecte physiquement du
serveur apache (quand le client ferme son browser quoi :))


[NON]

Aussitôt après avoir reçu une page web, le navigateur du client se
déconnecte physiquement du serveur. Ensuite, il peut lire la page aussi
longtemps qu'il veut, et quand il fermera vraiment son navigateur, ton
serveur n'a aucun moyen de le savoir.

Avatar
Denis Beauregard
Le 28 Apr 2005 21:48:13 GMT, ste écrivait dans
fr.comp.lang.php:

Salut à tous,

Est-il possible de savoir quand un client se deconnecte physiquement du
serveur
apache (quand le client ferme son browser quoi :))

Je suis en train de faire une extension php sous win32 avec apache et je
n'ai pas
vu de message particulier pour ce genre d'action...


Je pense que la seule façon, c'est comme dans certaines pages avec
pub et de faire un script java ou javascript (donc, c'est hors sujet
ici) qui interrogera le serveur à une certaine fréquence (aux 10
minutes par exemple). Trouve un site avec de la pub qui change
pour te donner des idées... Le noeud du problème sera de faire
un script qui ne fait pas d'erreur quand on se débranche d'Internet.

Mais si la page est en html pur, comme dit plus haut dans le fil, on
ne peut pas savoir.


Denis

Avatar
Guillaume Bouchard
Denis Beauregard wrote:
Je pense que la seule façon, c'est comme dans certaines pages avec
pub et de faire un script java ou javascript (donc, c'est hors sujet
ici) qui interrogera le serveur à une certaine fréquence (aux 10
minutes par exemple).


Jouste pour dire que dans ce cas là, mieux vaux faire un cron sur le
serveur qui nettoye des "sessions" qui ont plus de 10 minutes.

1) C'est bullet proof non dependant du client.
2) C'est plus clean AMHA.

Maitenant je ne connais pas l'interet, mais AMHA c'est une abberation.
Donc comme je suis curieux et que j'aime me tromper (car on apprend en
se trompant et je dois dire que c'est ennuyant d'avoir toujours raison,
donc apprendre c'est interessant) si tu peux m'expliquer pourquoi tu
compte faire cela, je suis preneur.

--
"%s@%s.%s" % tuple('.'.join(';'.join(map((lambda x:x.upper()),[e for e
in ""[::-1]][::-1])).lower(
).replace(';','').split('@')).split('.')) Moi aussi je peu le faire ;o)

Avatar
Denis Beauregard
Le 28 Apr 2005 23:29:54 GMT, Guillaume Bouchard
écrivait dans fr.comp.lang.php:

Denis Beauregard wrote:
Je pense que la seule façon, c'est comme dans certaines pages avec
pub et de faire un script java ou javascript (donc, c'est hors sujet
ici) qui interrogera le serveur à une certaine fréquence (aux 10
minutes par exemple).


Maitenant je ne connais pas l'interet, mais AMHA c'est une abberation.
Donc comme je suis curieux et que j'aime me tromper (car on apprend en
se trompant et je dois dire que c'est ennuyant d'avoir toujours raison,
donc apprendre c'est interessant) si tu peux m'expliquer pourquoi tu
compte faire cela, je suis preneur.


Je ne sais pas comment le faire, mais je sais que c'est faisable.
Par exemple, la page http://tva.canoe.ca/

Il suffit de regarder la 5e et dernière ligne de la section du haut
(avant la présentation par colonne). Il y a le sigle LCN et une
nouvelle qui suit cette ligne.

À toutes les quelques secondes, la lumière du modem clignote et le
texte de cette ligne est remplacé par un nouveau texte contenant
une nouvelle information. Le code de cette page est plein de
java et de javascript. Aux intéressés à décoder cette page et
voir comment ils font. (Et ce n'est pas du PHP, donc à discuter
dans le forum approprié).

Mon seul point est de dire que c'est faisable...

Ici, l'intérêt est de rafraîchir la ligne d'information. Ailleurs, il
peut s'agir d'afficher un nouveau bandeau publicitaire (le cas le plus
commun je pense). Dans les chats, je pense que cela sert aussi à
afficher les messages des autres sans avoir à demander une nouvelle
page. Pour ce qui est de la question initiale, c'est à celui qui la
pose d'en trouver l'intérêt.


Denis


Avatar
John Gallet
Bonjour,

Est-il possible de savoir quand un client se deconnecte physiquement du
serveur
apache (quand le client ferme son browser quoi :))


Sauf besoin juridique fort (garder une trace légale de la déconnexion)
ça ne sert à rien. Si tu veux déclencher une action en cas de
déconnexion, il faut 1) fournir un lien html "me déconnecter" 2) gérer
les time out de session. A ma connaissance, les sessions natives php ne
sont toujours pas capables de le faire. Donc tu gères tes sessions à la
main comme en php3 et ça roule.

Concernant le time out : NON A LA CRONTAB. 1) si un con la bousille les
sessions n'expirent plus 2) on en a pas toujours sous la main. Cf (une
foi de plus) la FAQ : http://faqfclphp.free.fr/#rub4.4
Il suffit d'utiliser l'activité des (autres) sessions pour déclencher
ses actions. De toutes façons, si personne n'essaye de se connecter, on
en a rien à foutre...

a++;
JG

Avatar
Guillaume Bouchard
John Gallet wrote:
Concernant le time out : NON A LA CRONTAB. 1) si un con la bousille les
sessions n'expirent plus 2) on en a pas toujours sous la main. Cf (une
foi de plus) la FAQ : http://faqfclphp.free.fr/#rub4.4
Il suffit d'utiliser l'activité des (autres) sessions pour déclencher
ses actions. De toutes façons, si personne n'essaye de se connecter, on
en a rien à foutre...


Oui, ça c'est certain.
J'ai parlé de la crontab car dans le cas precit on avait vraiment
l'impression que il falait ABSOLUEMENT que la session exprire à ce
moment. Sinon pourquoi voudrait-t-il se prendre la tete avec du code client.

--
Guillaume.

Avatar
Frederic Rouchouze
Est-il possible de savoir quand un client se deconnecte physiquement du
serveur
apache (quand le client ferme son browser quoi :))


Il me semble que les sessions PHP gèrent ça (peut-être pas de manière 100%
fiable) lorsque les cookies sont autorisés sur le client. Par défaut, la
session est détruite lorsque l'utilisateur ferme son browser.

Me trompe-je ?
--
Frédéric Rouchouze
mailto:

Avatar
Olivier Miakinen
Le 02/06/2005 23:24, Frederic Rouchouze répondait à un article vieux de
plus d'un mois :
Est-il possible de savoir quand un client se d[é]connecte physiquement du
serveur
apache (quand le client ferme son browser quoi :))



Ben dis donc ! C'est le serveur de news de free qui garde les articles
pendant pkus d'un mois, ou bien c'est ta réponse qui est restée bloquée
pendant tout ce temps ?

Il me semble que les sessions PHP gèrent ça (peut-être pas de manière 100%
fiable) lorsque les cookies sont autorisés sur le client.


Ben non. Comme déjà répondu par Denis Beauregard, c'est impossible à
moins de maintenir une activité continuelle à base de Java ou de JavaScript.

Par défaut, la
session est détruite lorsque l'utilisateur ferme son browser.


Encore non. La session peut être détruite à t + delta, t étant le moment
où a eu lieu la dernière requête. Il faudrait peut-être cesser de croire
qu'un site peut espionner le visiteur au point de savoir s'il a fermé
son navigateur ou bien s'il est sorti pisser.

Me tromp[é]-je ?


Ben oui.


Avatar
Marc

Il me semble que les sessions PHP gèrent ça (peut-être pas de manière 100%
fiable) lorsque les cookies sont autorisés sur le client. Par défaut, la
session est détruite lorsque l'utilisateur ferme son browser.


oui et non. La session est detruite localement, mais rien n'averti le
serveur que la session se termine. C'est au serveur de faire la part des
choses et de determiner par un timeout que dans un ensemble de session,
certaines sont terminées. Cela peut se gerer dans une table SQL.

Avatar
Patrick Mevzek


Il me semble que les sessions PHP gèrent ça (peut-être pas de manière
100% fiable) lorsque les cookies sont autorisés sur le client. Par
défaut, la session est détruite lorsque l'utilisateur ferme son
browser.


oui et non. La session est detruite localement,


Plus précisément:
le cookie de session, qui n'a pas de date d'expiration (et c'est pour
cela qu'on parle de cookie de session d'ailleurs) est détruit à la
fermeture du navigateur, pour la simple raison que la cookie de session
n'est stocké qu'en mémoire et pas sur le disque, à l'opposé des autres
cookies.

Mais cela ne détruit pas la session, car le navigateur n'a aucune
information de session, si ce n'est le cookie et l'identifiant de session
renfermé dedans.

La session (ie le contenu des variables liées à la session) est purement
du côté du serveur, et sa destruction, si elle a lieu (PHP implémente un
mécanisme de garbage collection qui détruit les sessions trop vieilles,
style 1 jour), a lieu a un moment qui est complétement décorrelé du
moment où le navigateur se termine.

Sauf si on a prévu un bouton ``Se déconnecter'' dans son application Web,
*et* que l'utilisateur clique dessus avant de fermer son navigateur (et
même si on lui dit de le faire, tous ne le font pas), bouton qui
déclenche dans l'application la suppression des informations de session,
pour supprimer les données sensibles.

--
Patrick Mevzek . . . . . . Dot and Co (Paris, France)
<http://www.dotandco.net/> <http://www.dotandco.com/>
Dépêches sur le nommage <news://news.dotandco.net/dotandco.info.news>


1 2