Leggere SessionId attivi

mercoledì 20 febbraio 2008 - 11.57

sarax Profilo | Newbie

ciao a tutti,
qualcuno sa se è possibile leggere tutti i sessionId di un applicativo.
Mi spiego.
Ho un'applicazione web a cui accedono n utenti.
Ogni utente ha una sessione diversa con un suo SessionId.
Credo che asp_net si memorizzi tutti questi sessionId da qualche parte (un array?).
Sapete se è possibile ottenere i valori dei sessionId attivi, per vedere se tra questi c'è anche quello della sessione corrente?

Grazie
Sara

Ferux Profilo | Newbie

Ciao,
non credo che sia possibile recuperare tutti i SessionID attivi, però potresti fare una mezza furbata, del tipo che ogni volta che accede un utente, inserisci in una variabile Application il suo sessionId.

Poi recuperi il valore della Application ed il gioco è fatto.

Saluti
Ing Ferux
[MCP MCAD]

sarax Profilo | Newbie

Infatti per il momento l'ho risolta così.

Il problema si pone perchè vorrei ripulire dall'Application gli id di sessione scaduti.
Ho pensato di gestire la cosa con un timer da Global.asax:
- su Application_Start faccio partire il timer
- sull'evento Elapsed del timer faccio la pulizia.

Per sapere quali sono gli id scaduti vorrei leggere il timeout di sessione (HttpContext.Current.Session.Timeout). Però in Application_Start HttpContext.Current è null.

Pensavo che una alternativa fosse quella di leggere un (ipotetico) array con id di sessione che si crea asp_net (così evitato di dover fare questa pulizia), ma non ho trovato nulla. In più tu adesso mi confermi che probabilmente non si può fare.

Devo cercare un'altra soluzione.
Grazie
Sara

Ferux Profilo | Newbie

Ciao,
allora l'applicazione può terminare in due modi:

1) L'utente chiude regolarmente tramite un pulsante "Log Out" la sessione e tu lato aspx scodi dall'application il SessionId

2) Chiude il browser premendo "x". Allora tu catturi l'onclose della pagina aspx e fai partire (lato client mediante javascript) una pagina logout.aspx che prende come querystring (o lo metti in un form) il sessionId e questa pagina non fa altro che scodare il sessionid e morire (window.close()). Il SesssionId lo memorizzi su un campo Hidden della pagina e lo valirizzi nell'evento onload della pagina

Spero di esserti stato di aituo
Saluti
Ing Ferux
[MCP MCAD]

sarax Profilo | Newbie

Si, potrebbe essere una buona alternativa.

Prima di provarla però mi sono imbattuta in "Session.IsNewSession" che se ho ben capito dovrebbe dirmi se si tratta di una nuova sessione (utente che accede per la prima volta al sito) oppure no.
Se questo valore è false significa che l'id della sessione corrente non è nuovo (l'utente sta navigando sulle pagine del sito).

Se così è posso evitare di aggiungere ad Application i sessionId e, di conseguenza, non devo preoccuparmi della pulizia (e quindi evito anche il timer in Global.asax).

Hai per caso qualche info in più su Session.IsNewSession?

Grazie
Sara

Ferux Profilo | Newbie

Ciao,
credo che Session.IsNewSession sia utile negli scenari in cui si vuol loggare o comunque gestire il fatto che una pagina è rimasta inattiva per un certo periodo di tempo. (Timeout)
Non credo che sia utile nel tuo caso. Comunque prova e fammi sapere.

Saluti
Ing Ferux
[MCP MCAD]

sarax Profilo | Newbie

Al momento quello che mi interessa è:
- se si tratta di una nuova sessione --> faccio qualcosa
- se la sessione è la stessa --> non faccio nulla

Ora ho messo l'applicativo in produzione e vediamo cosa registra.

Certo per ulteriori sviluppi (ma su altri applicativi) questa soluzione non mi serve.
Mi spiego: devo conoscere le sessionId attive e quindi credo che sono quasi obbligata a memorizzare in Application i sessionId.
Ti farò sapere quale soluzione adotterò per lo scodamento.

Grazie
Ciao
Sara
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5