| Davide Musumeci |
Session_End - strano comportamento
Salve a tutti. Ho un problema che mi ha già fatto perdere 2 giorni...in qualche modo l'ho risolto ma non mi spiego come mai - avendo spulciato ovunque in rete (forse sto invecchiando :)) - accada.
La dinamica riguarda le sessioni ed è la seguente: 1) WebConfig: <sessionState mode="InProc" cookieless="UseCookies" timeout="20" /> 2) I soliti handler nel global.asax Session_Start e Session_End 3) Al Logout: Session.Clear(); Session.Abandon(); FormsAuthentication.SignOut(); Response.Redirect("Index.aspx"); Risultato: al redirect alla pagina riutilizzo del medesimo SessionID com'è normale che sia...ma...oltre al "Session_start" che viene richiamato in quanto nuova sessione viene anche richiamato durante il ciclo di vita della richiesta anche il "Session_End" come se la sessione venisse avviata e poi resettata. Ciò accade anche in ulteriori request o postback...stesso comportamento..."Session_start" parte e poi segue anche "Session_End" che invece quest'ultimo non dovrebbe seguire! Nel codice che ho controllato migliaia di volta non c'è nulla che resetti la sessione e induca ad esser chiamato l'handler Session_End tranne il Session.Abandon() che è chiamato solo al Logout. Questo l'ho risolto così: Session.Clear(); Session.Abandon(); *** Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));*** FormsAuthentication.SignOut(); Response.Redirect("Index.aspx"); Resettando il SessionID tutto funge come dovrebbe e viene alle successive richiesta, redirect compreso, chiamato solo il Session_Start SENZA il Session_End alla fine!!! Tutto questo è alquanto strano e da nessuna parte sembra esservi una minimo accenno tranne qui http://forums.asp.net/t/1441221.aspx ma niente di risolutivo. Sembra che il vecchio SessionID non venga affatto riciclato come dovrebbe essere ma venga rigettato! E questo non è esposto da nessuna parte come comportamento previsto. Inoltre optando per la mia soluzione di cui sopra...quando le sessioni scadono in modo autonomo e viene chiamato il Session_End, ovviamente il SessionID non viene ripristinato autonomamente e quindi un utente che stà fermo mettiamo 30 minuti lasciando però aperta la sessione del browser e poi a sessione scaduta, ritorna a navigare ecco che lo strano comportamento torna in "essere"...quindi ad ogni richiesta mi chiama SEMPRE il Session_End per cui tutto il codice che ho lì viene eseguito in modo inappropriato facendomi sballare tutto (vedi ad esempio il conteggio degli utenti..) Ho provato pure su IIS e non solo sul server di sviluppo...medesimo comportamento; ho tolto l'antivirus, medesimo comportamento. Ma che diavolo è!? 100 euro a chi svela l'arcano!! ;) |
| Lorenzo Moretti |
Re: Session_End - strano comportamento
Ciao,
hai poi trovato la soluzione che cercavi? Il comportamento "anomalo" avviene anche senza usare i cookies? Lorenzo |
| Davide Musumeci |
Re: Session_End - strano comportamento
Ciao Lorenzo...beh diciamo che ho trovato una sorta di workaround che a me funziona...ad altri - che confermano il medesimo problema - no!!!
Ti dò il link del post sul forum ufficiale di asp.net: http://forums.asp.net/t/1507805.aspx Resta cmq ancora un mistero tutto ciò :) |