by Njål

Microsoft IIS innstillinger og Asp.net session timeout

Her om dagen fikk jeg en forespørsel som i all enkelhet gikk ut på å justere Session Timeout for en ASP.NET webside. Denne instillingen spesifiserer bl.a. hvor lenge en nettleser kan stå innlogget på en webside før man blir  logget ut. Har gjort dette mange ganger før, så burde gå som fot i hose.

Jeg gikk inn i web.config og endret session timeout verdien til 120 (minutter).

<sessionState cookieless="UseCookies" mode="InProc" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" stateConnectionString="tcpip=127.0.0.1:42424" timeout="120" />


Så gikk jeg inn i login siden og justerte loginTicket’en der til også å vare i 120 minutter (websiden bruker forms authentication).

FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(“authTicketName”, false, 120); //120 minutes timeout.

Dermed burde alt være i skjønneste orden. Jeg logget inn på websida, surfet rundt litt.. og gikk til lunch. Når jeg kom tilbake 30 minutter senere prøvde jeg å surfe videre.. men ble redirected til loginsiden med en gang. Jeg var altså blitt logget ut.. etter ca 30 minutter.. what?

Etter å ta tenkt meg litt om (aka. googlet) fant jeg ut at årsaken til dette ligger i webserveren – Microsoft IIS 7. I App Pool’en her er det nemlig spesifisert at webserver prosessen skal avsluttes etter 20 minutters inaktivitet. Så mens jeg var midt i karbonadene døde prosessen.. og tok med seg session’en (og authticket’en) i dragsuget. Etter å ha endret denne verdien til 120 fungerer det som forventet.

På en webside med flere besøkende, så vil w3wp.exe prosessen sjelden/aldri stå på tomgang i 20 minutter.. slik at man ikke trenger å konfigurere dette i IIS. Men har du en webside med begrenset trafikk så bør Idle Time-out verdien justeres til Session sin timeout verdi (eller større).

Tags: , ,
  • Joakim

    Bra artikkel, har hatt mye “gøy” meg med lignende problemer selv. Det er verdt å merke seg at AppPool’n i IIS6/7 resirkuleres av flere grunner enn w3wp processens “Idle Time-out”-verdi. F.eks resirkuleres w3wp prosessen periodisk dersom dette ikke slås av (hver 29 time i IIS6). Andre grunner kan være at prosessen merker at web.config har blitt endret (det holder at den sjekkes av et anti-virus program), eller at maskinen begynner å gå tom for minne. Dersom man lagrer FormsAuthenticationTicket i sesjon og ønsker å unngå at en bruker logges ut når AppPool’n resirkuleres (eller at man mister andre verdier i sesjonen man er avhengig av) bør man vurdere å benytte StateServer eller sql server til å holde på sesjonene (det er selvfølgelig noen tradeoffs ved å gå bort fra inproc-sesjoner, men mange fordeler også).