Есть много способов, которые ни один из них не желателен. Я перечислю то, что я изучаю.
Примечание: я надеюсь, что люди это понимают. Большинство людей предполагают, что я хочу выйти из системы только тогда, когда клиент закрывает браузер. Дело не в этом, я просто хочу высвободить ресурсы вместо 20-минутного лага. Думаю, большинство разработчиков просто обновляют компьютер.
1) Продолжайте пинговать свой сервер из клиентского скрипта, таким образом, он будет поддерживать «короткий сеанс» в живых.
Это, очевидно, увеличит трафик на ваш сервер, и, очевидно, он не выйдет из системы мгновенно, так как вы не хотите пинговать каждую секунду.
2) Используйте Javascript от клиента broswer. Пока что я не думаю, что какой-либо из них работает, даже в существующем примере кода IE, clienX будет> 0. В любом случае, вот код, который работает для меня до сих пор. Только на IE, так как событие Firefox не работает для меня прямо сейчас. Я приблизительно рассчитал положение кнопки закрытия относительно экрана и определил, нажал ли клиент в этой области. Если кнопка обновления слишком близка к кнопке закрытия (по оси x), она будет думать, что вы нажали кнопку закрытия, но это редкий случай.
<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);">