Usuário com melhor resposta
Como finalizar uma sessão quando o usuário fecha o navegador

Pergunta
-
Estou trabalhando com ASP.NET com WEBFORM to seguinte problema preciso atualizar no banco de dados o status do usuário se está ou não online. Fiz um sistema que atualiza o status no login para online e quando clica no botão logout ele atualiza o status para offline ,mas se o usuário fechar a pagina do navegador o status fica como online e este é o problema. Já tentei fazer por javascript no OnUnload, mas se eu fizer acada pageload da pagina ele entra no OnUnload e deslogar o usuário
Respostas
-
Eu consegui resolver a situação da seguinte forma:
var ieBrowser = false;
var otherBrowser = false;
function getHTTPRequest() {
if (navigator.appName == 'Microsoft Internet Explorer') {
ieBrowser = true;
} else {
otherBrowser = true;
}
if (window.XMLHttpRequest && otherBrowser) { // Firefox
//otherBrowser = true;
return new XMLHttpRequest();
} else { // IE
//ieBrowser = true;
var parsers = new Array();
parsers[0] = "MSXML3"; parsers[1] = "Microsoft"; parsers[2] = "MSXML2";
parsers[3] = "MSXML";
for (var i = 0; i < parsers.length; i++) {
try {
return new ActiveXObject(parsers[i] + ".XMLHTTP");
} catch (e) {
//ignore the error and try to create a new Request object
// with the next parser.
}
}
}
}
function LogOut(e) {
getHTTPRequest();
if (ieBrowser) {
if ((x == null) || (x == undefined)) {
myPageX = 0;
}
else {
myPageX = x;
}
if ((y == null) || (y == undefined) || (y <= 5)) {
myPageY = 0;
}
else {
myPageY = y;
}
if ((myPageX == 0) || (myPageY == 0)) {
window.open('../LogOut.aspx', 'LogOut', 'width=' + 100 + ', height=' + 100 + ', top=' + 0 + ', left=' + 0 + ',scrollbars=no, status= no, toolbar= no, location= no, directories= no, menubar= no, resizable=no, fulscreen=no');
}
}
//firefox, opera, chrome
else {
if (otherBrowser) {
if ((x == null) || (x == undefined)) {
myPageX = 0;
}
else {
myPageX = x;
}
if ((y == null) || (y == undefined) || (y <= 5)) {
myPageY = 0;
}
else {
myPageY = y;
}
if ((myPageX == 0) || (myPageY == 0)) {
window.open('../LogOut.aspx', 'LogOut', 'width=' + 100 + ', height=' + 100 + ', top=' + 0 + ', left=' + 0 + ',scrollbars=no, status= no, toolbar= no, location= no, directories= no, menubar= no, resizable=no, fulscreen=no');
}
}
else {
alert("Browser não encontrador");
}
}
}
this.window.onbeforeunload = LogOut;
var x;
var y;
document.onmousemove = function (e) {
if (navigator.appName == 'Microsoft Internet Explorer') {
x = event.clientX;
y = event.clientY;
}
else {
x = e.pageX;
y = e.pageY;
}mas não é sempre que o browser entra neste javascript coloquei ele em uma pagina de menu
- Marcado como Resposta Seilor Bonancio JuniorModerator terça-feira, 23 de julho de 2013 16:27
Todas as Respostas
-
Olá Eduardo,
Olha esse exemplo aqui
http://social.msdn.microsoft.com/Forums/pt-BR/4be05c30-94f0-4180-8015-aa30e85f982b/matando-sessions
-
Veja
http://stackoverflow.com/questions/1921941/close-kill-the-session-when-the-browser-or-tab-is-closed
http://stackoverflow.com/questions/9358631/kill-asp-net-session-when-the-browser-or-tab-is-closed
Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC
-
Eu consegui resolver a situação da seguinte forma:
var ieBrowser = false;
var otherBrowser = false;
function getHTTPRequest() {
if (navigator.appName == 'Microsoft Internet Explorer') {
ieBrowser = true;
} else {
otherBrowser = true;
}
if (window.XMLHttpRequest && otherBrowser) { // Firefox
//otherBrowser = true;
return new XMLHttpRequest();
} else { // IE
//ieBrowser = true;
var parsers = new Array();
parsers[0] = "MSXML3"; parsers[1] = "Microsoft"; parsers[2] = "MSXML2";
parsers[3] = "MSXML";
for (var i = 0; i < parsers.length; i++) {
try {
return new ActiveXObject(parsers[i] + ".XMLHTTP");
} catch (e) {
//ignore the error and try to create a new Request object
// with the next parser.
}
}
}
}
function LogOut(e) {
getHTTPRequest();
if (ieBrowser) {
if ((x == null) || (x == undefined)) {
myPageX = 0;
}
else {
myPageX = x;
}
if ((y == null) || (y == undefined) || (y <= 5)) {
myPageY = 0;
}
else {
myPageY = y;
}
if ((myPageX == 0) || (myPageY == 0)) {
window.open('../LogOut.aspx', 'LogOut', 'width=' + 100 + ', height=' + 100 + ', top=' + 0 + ', left=' + 0 + ',scrollbars=no, status= no, toolbar= no, location= no, directories= no, menubar= no, resizable=no, fulscreen=no');
}
}
//firefox, opera, chrome
else {
if (otherBrowser) {
if ((x == null) || (x == undefined)) {
myPageX = 0;
}
else {
myPageX = x;
}
if ((y == null) || (y == undefined) || (y <= 5)) {
myPageY = 0;
}
else {
myPageY = y;
}
if ((myPageX == 0) || (myPageY == 0)) {
window.open('../LogOut.aspx', 'LogOut', 'width=' + 100 + ', height=' + 100 + ', top=' + 0 + ', left=' + 0 + ',scrollbars=no, status= no, toolbar= no, location= no, directories= no, menubar= no, resizable=no, fulscreen=no');
}
}
else {
alert("Browser não encontrador");
}
}
}
this.window.onbeforeunload = LogOut;
var x;
var y;
document.onmousemove = function (e) {
if (navigator.appName == 'Microsoft Internet Explorer') {
x = event.clientX;
y = event.clientY;
}
else {
x = e.pageX;
y = e.pageY;
}mas não é sempre que o browser entra neste javascript coloquei ele em uma pagina de menu
- Marcado como Resposta Seilor Bonancio JuniorModerator terça-feira, 23 de julho de 2013 16:27