webForumDet fria alternativet

Registrera att användare loggat ut vid session timeout

.NET

5 svar · 353 visningar · startad av udden

Medlem sedan mars 200174 inlägg
Frågan#1

Lagrar information om användarnamn m.m i sessionvariabler när en användare loggar in, och lägger en post i databasen för att kunna lagra hur länge en användare varit inloggad.

Men hur kan jag registrera att användaren har loggats ut då session-timeout inträffar?

Jag skulle behöva komma åt sessionvariablerna (namn,id t.ex) för att uppdatera min databaspost när session-timeout sker, men det verkar inte gå i Session_End(...) i global.asax.cs då session-objektet försvunnit verkar det som.

Någon som har nått förslag?

Medlem sedan juni 2004533 inlägg
#2

Naturligtvis finns sessions-objektet kvar när Session_OnEnd körs, annars vore det ju en praktiskt taget värdelös funktion.

Det troliga är att du har något annat fel i din kod, som till exempel att du försöker använda Server.MapPath (för att få sökvägen till en Access-databas), vilket däremot inte fungerar.

Medlem sedan mars 200174 inlägg
#3

InProc is the only mode that supports the Session_End event. The Session_End event fires when a user's session times out or ends. You can write code in this event to clean up server resources. (MSDN).

Metoden heter tyvärr inte session_ON_end som du skrev, utan Session_End och det eventet triggas när sessionen har fått time out. Session-objektet finns, men det är en NY session som skapats här, den gamla är borta. Metoden är inte värdelös, är här man skall rensa upp resurser så som cache m.m.

Men jag förstår inte varför man inte kan få fram sessions id:t som fick time out här.

Det verkar inte finnas ett lätt svar, jag tar en annan approach och löser det på alternativa sätt istället.

Medlem sedan juni 2004533 inlägg
#4

Session_End körs när sessionen gör timeout, men sessions-objektet finns kvar.

Jag testade att ifrån Session_End skriva Session.SessionID och en sessionsvariabel som jag lagt in ifrån en sida, till en fil. Rätt id och värdet i sessionsvariabeln hamnade i filen hur fint som helst.

Medlem sedan mars 200174 inlägg
#5

Mycket märkligt! För jag får ett NYTT sessionsid när jag skriver Session.ID ... och hittar inte mina värden. Skumt. Från vad jag kan läsa mig till från ms så finns inte längre sessionen där.

Medlem sedan juni 2004533 inlägg
#6

Har du någon länk till eller citat ifrån något som pekar på att sessionen skulle avslutas innan metoden anropas?

Det låter väldigt konstigt om den först skulle dumpa det gamla sessionsobjektet för att sedan skapa ett nytt sessionsobjekt enbart för att köra koden som hanterar att det gamla sessionsobjektet avslutas. Vad händer med det nya sessionsobjektet i så fall? Det är ju inte kopplat till någon session, så det enda som kommer att hända med det är att det ligger i minnet tills det gör timeout. Kommer Session_End att anropas även då, och skapa ännu ett nytt sessionsobjekt? Det skulle ju innebära att det bara skapas fler och fler sessionsobjekt på servern, tills minnet är fullt, och servern klappar ihop...

268 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)