Il existe plusieurs façons, dont aucune n'est souhaitable. Je vais énumérer ce que j'apprends. Note: J'espère que les gens comprennent cela. La plupart des gens supposent que je veux me déconnecter seulement lorsque le client ferme le navigateur. Ce n'est pas le cas, je veux juste libérer des ressources au lieu de 20 minutes de retard. La plupart des développeurs mettent juste à jour l'ordinateur, je suppose.
1) Gardez ping votre serveur du script du client, ainsi, il gardera la "courte session" vivante. Cela va évidemment augmenter le trafic vers votre serveur et il ne sera évidemment pas déconnecté instantanément car vous ne voulez pas pinger comme chaque seconde.
2) Utilisez Javascript du broswer client. Jusqu'à présent, je ne pense pas qu'aucun d'entre eux fonctionne, même l'exemple existant de code IE, le clienX sera> 0. De toute façon, voici le code qui fonctionne pour moi jusqu'à présent. Seulement sur IE depuis Firefox ne fonctionne pas pour moi en ce moment. J'ai à peu près calculé la position du bouton de fermeture relativement sur l'écran et déterminer si le client a cliqué sur cette zone. Si le bouton d'actualisation est trop proche du bouton de fermeture (x sage), il semblera que vous avez cliqué sur le bouton de fermeture, mais c'est un cas rare.
<head runat="server">
<title>Untitled Page</title>
<script type="text/javascript">
function test(event) {
var X = window.event ? window.event.screenX : event.clientX;
// IE only because event.clientX for FF = undefined (event.clientX IS the FF way).
if (X == null) {
alert("No X");
return;
}
var left = window.screenLeft ? window.screenLeft : window.screenX;
var winwidth = document.body.clientWidth ? document.body.clientWidth : window.outerWidth;
var leftMargin = document.body.leftMargin ? parseInt(document.body.leftMargin, 10) : 0;
var rightMargin = document.body.rightMargin ? parseInt(document.body.rightMargin, 10) : 0;
var resultX = X - (window.screenLeft + winwidth + leftMargin + rightMargin); // scroll bar width is not calculated.
var Y = window.event ? window.event.clientY : event.clientY;
if (resultX > -25 && Y < 0)
alert("logging out");
};
</script>
</head>
<body onbeforeunload="test(event);">
Le cœur du problème est que HTTP est un protocole sans état. (Vous pouvez envisager d'ajouter cela, ou une référence à cette déclaration, par ... j'ai oublié.) – MvanGeest
Je ne suis pas sûr si vous avez abordé le problème du bon angle. Je n'ai pas nécessairement besoin de détruire la session "de près". Il devrait finalement être nettoyé dans un proche avenir de toute façon, car il n'a pas été lu ou mis à jour pendant un certain temps. Je veux juste empêcher la session d'être saccagée pendant que le navigateur est encore en cours d'exécution (Cette session particulière du navigateur bien sûr) Le fait qu'il pourrait tomber en panne ou d'autres choses stupides ne devrait pas être considéré. Il n'y a aucun moyen d'empêcher Murphy de faire son travail. – Anders
Mon point était, seul moyen fiable de vérifier s'il y a encore quelqu'un de l'autre côté de la connexion est de leur parler. – Mchl