Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to logout my application when I closed the window?

In my chat application i am having the logout button and it works fine.

Now I need to logout the application when I closed the browser window also..How can I achieve this...

Thanks in advance...

like image 693
Fisher Man Avatar asked Nov 15 '12 15:11

Fisher Man


People also ask

How to logout user when browser is closed?

we can find the tab/browser close event in javascript using " window. onbeforeunload " & " window. onunload " events. you just need to call the logout action from javascript by clicking on logout icon.

How to automatically logout when close the browser in php?

Set the session cookie parameters before you start your session. session_set_cookie_params(0); session_start(); Zero means "until the browser is closed". This solution would be my personal "best" way of doing it, because you can control it per PHP-script, instead of site-wide.

How can a user get logged out from a website?

You may have to click your profile picture or username to reveal this option. Look for one of these options near the top-left or top-right section of the browser window or drop-down menu. Clicking that option logs you out of the online account.

How do you handle browser tab close angular not close refresh?

You can use the onunload event handle to detect this.


3 Answers

There is no exact way to do this with the clientside. There is no event that is fired when the page is exited. It should be done with the Session End event on the server.

You can try to use onbeforeunload or unload, but race conditions will prevent that from happening. AND they do not fire for browsers crashing, lost internet connection, etc.

like image 130
epascarello Avatar answered Sep 20 '22 14:09

epascarello


I dealt with this issue recently in my angularJS app - The main issue was that I don't want to log you out if you refresh, but I do want to if you close the tab.. Ajax requests with onbeforeunload/onunload aren't guaranteed to wait for response, so here is my solution:

I set a sessionStorage cookie on login that is just a bool - set to true when I get login response

sessionStorage.setItem('activeSession', 'true');

Obviously, on logout, we set this flag to false

Either when controller initializes or using window.onload (in my app.js file) - I check for this activeSession bool.. if it is false, I have this small if statement - where if conditions are met I call my logout method ONLOAD instead of onunload

   var activeSession = sessionStorage.activeSession;
    if (sessionStorage.loggedOutOnAuth) {
        console.log('Logged out due to expiry already')
    }
    else if (!activeSession) {
        sessionStorage.loggedOutOnAuth = true;
        _logout()
    }

Basically, the "loggedOutAuth" bool let's me know that I just expired you on page load due to the absence of an activeSession in sessionStorage so you don't get stuck in a loop

This was a great solution for me since I didn't want to implement a heartbeat/websocket

like image 31
jbownzino Avatar answered Sep 19 '22 14:09

jbownzino


Add your logout code to the on onunload event.

window.onunload = function () {
    //logout code here...
}

In JQuery you can use the .unload() function. Remember that you don't have much time so you may send the Ajax request but the result may not reach the client.

Another trick is to open a small new window and handle the logout there.

window.open("logout url","log out","height=10,width=10,location=no,menubar=no,status=no,titlebar=no,toolbar=no",true);

If you want to disable closing the window (or at least warn the user), you can use this code:

window.onbeforeunload = function(event) {
    //if you return anything but null, it will warn the user.
    //optionally you can return a string which most browsers show to the user as the warning message.
    return true;
}

Another trick is to keep pinging the client every few seconds. If no reply comes back, assume the user has closed the window, browser has crashed or there is a network issue that ended the chat session anyway. On the client side, if you don't receive this ping package, you can assume that network connection or server has a problem and you can show the logout warning (and optionally let the user login again).

like image 25
AlexStack Avatar answered Sep 22 '22 14:09

AlexStack