Just nu i M3-nätverket
Gå till innehåll

Http anrop vid unload


.M

Rekommendera Poster

Jag behöver skicka ett http-anrop när en användare lämnar sidan eller stänger webbläsaren så verderbörande loggas ut. Dvs på onunload eventet. Men det verkar inte gå att göra http anrop i det eventet, jag kan inte göra det i onbeforeunload heller för det är där jag hanterar en fråga om besökaren verkligen vill stänga fönstret eller lämna sidan.

 

Någon som råkar ha ett förslag på hur jag kan göra?

Länk till kommentar
Dela på andra webbplatser

Mr Andersson

Låt servern göra timeout på sessionen, vad jag vet finns det inget (bra?) sätt att göra det på.

 

Vad är det egentliga problemet? Finns kanske andra sätt att lösa det på?

Länk till kommentar
Dela på andra webbplatser

Problemet är att säkerhetsgänget är lite gnälliga på att vi inte explicit stänger sessionen om användaren oväntat avslutar webbläsaren. Och det vore ganska oproffsigt av mig att åtminstone inte utreda frågan innan jag struntar i att lösa det.

Länk till kommentar
Dela på andra webbplatser

Mr Andersson

Beror på om du menar HTTP-session eller Server-session.

Eventuella kvarvarande HTTP-sessioner stängs när webläsaren stängs.

Server-session ligger kvar den tid som är satt i webservern, tex 20 minuter. Det finns inget sätt att få tag i en öppen server-session om man stängt webbläsaren (dessa sessioner identifieras med en tillfällig cookie) och det finns heller ingen anledning att manuellt stänga en serversession i förväg.

Länk till kommentar
Dela på andra webbplatser

Man kan inte garantera att onload-eventet körs, men mad jquey skulle det se ut typ så här:

$(window).unload(function () {
   $.ajax({
     type: 'GET',
     async: false,
     url: 'user_logout.aspx'
   });
});
Länk till kommentar
Dela på andra webbplatser

Jag använder Angular till denna lösning. Och det jag kommit fram till hitils är 

class BeforeUnloadService {
    constructor($window) {
        'ngInject';
        this.$window = $window;
        const unload = () => {
            console.log('unload');
            let request = new XMLHttpRequest();
            request.open('get', SIGN_OUT, false);
            request.send(null);
        };
        $window.addEventListener('unload', unload);
        $window.onunload = unload;
    }

Jag kan se att eventet triggas, men själva http-anropet verkar inte köras. Jag vet att Angular har lite fåniga timings etc, vilket gör att dom kanske fördröjer anropet och så hinner fönstret stänga eller så. Men det verkar samtidigt inte stämma då jag inte använder angulars egna $http-tjänst just för att slippa den huvudvärken.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...