Banale problema con le sessioni

giovedì 05 giugno 2008 - 23.09

motogpdesmo16 Profilo | Senior Member

Salve a tutti, ho un problema che definire banale è dir poco per voi espertissimi del settore.
Al login dell'utente creo la sessione con USR e l'id dell'utente pescato dal database

Session.Add("USR" & drUtenti.Item("Id_Utenti").ToString(), 1)

ed effettuo il trasferimento alla pagina "Menu", personalizzata per l'utente (Aggiungo le informazioni del tipo "Benvenuto motogpdesmo16" ecc)

Response.Redirect("Menu.aspx?id_utenti=" & nSess.ToString)
dove nSess è il valore contenuto in drUtenti.Item("Id_Utenti")

Fin qui tutto ok.
In Menu.aspx ho tre link verso altre tre pagine, che chiameremo A.aspx, B.aspx, C.aspx parametrizzate sempre con il passaggio di Id_Utenti. Pertanto i link
diventano A.aspx?id_Utenti=1,B.aspx?id_Utenti=1, C.aspx?id_Utenti=1. TUtte le chiamate avvengono con il response.redirect

Al caricamento (Page_Load) di A.aspx?id_Utenti=1, per verificare se posso effettivamente mostrare le funzionalità della pagina, effettuo questo controllo:
If Session("USR" & Request.Params("id_utenti").ToString()) = 1 Then 'elenco operazioni Endif
A questo punto Session("USR1"), se prima valeva 1 (numerico), adesso vale NOTHING.

Sapete per caso aiutarmi...sto impazzendo!!

Spero di essere stato chiaro nell'esposizione.
Grazie anticipatamente.

Stroke Profilo | Junior Member

>Salve a tutti, ho un problema che definire banale è dir poco
>per voi espertissimi del settore.
>Al login dell'utente creo la sessione con USR e l'id dell'utente
>pescato dal database
>
>Session.Add("USR" & drUtenti.Item("Id_Utenti").ToString(), 1)
>
>ed effettuo il trasferimento alla pagina "Menu", personalizzata
>per l'utente (Aggiungo le informazioni del tipo "Benvenuto motogpdesmo16"
>ecc)
>
>Response.Redirect("Menu.aspx?id_utenti=" & nSess.ToString) dove
>nSess è il valore contenuto in drUtenti.Item("Id_Utenti")
>
>Fin qui tutto ok.
>In Menu.aspx ho tre link verso altre tre pagine, che chiameremo
>A.aspx, B.aspx, C.aspx parametrizzate sempre con il passaggio
>di Id_Utenti. Pertanto i link
>diventano A.aspx?id_Utenti=1,B.aspx?id_Utenti=1, C.aspx?id_Utenti=1.
>TUtte le chiamate avvengono con il response.redirect
>
>Al caricamento (Page_Load) di A.aspx?id_Utenti=1, per verificare
>se posso effettivamente mostrare le funzionalità della pagina,
>effettuo questo controllo:
>
>If Session("USR" & Request.Params("id_utenti").ToString()) =
>1 Then
> 'elenco operazioni
> Endif
>
>A questo punto Session("USR1"), se prima valeva 1 (numerico),
>adesso vale NOTHING.
>
>Sapete per caso aiutarmi...sto impazzendo!!
>
>Spero di essere stato chiaro nell'esposizione.
>Grazie anticipatamente.
>
>

Secondo ne ti stai complicando la vita.
Nel global.asax nella funzione Session_start inserisci Session("USR") = ""

Nella pagina di log scrivi Session("USR") = 'il codice che hai trovato

nelle pagine di arrivo senza mettere querystring negli url nella funzione Load inserisci
if Session("USR") = x then

end if

Ma detto questo ti invito a leggere qualcosa cercando FormsAuthentication nella guida, un sistema più moderno e stabile per autenticarsi nei siti web. Ti consentirebbe di ripescare il codiceutente nell'httpcontext in qualsiasi pagina.

ciao
Furio
http://www.opsi.ws

motogpdesmo16 Profilo | Senior Member

Ciao Furio,
grazie della risposta innanzitutto.
PRemettendo che anche in ambiente asp.net ho sempre utilizzato questo metodo per le sessioni, vorrei solo fare una precisazione a quanto ho scritto precedentemente qualora non fosse chiaro:
per l'utente che ha id_utenti = 1 avrò USR1=1;
per l'utente che ha id_utenti = 43 avrò USR43 = 1
ecc ecc

se non ho capito male tu intendi assegnare ad USR volta per volta il valore di id_utenti. E quindi se accede l'utente con id_utenti = 1 egli avrà USR=1; se accede l'utente con id_utenti = 43 avrà USR=43 ecc.
Così facendo, non si creano problemi di concorrenza qualora due utenti siano online nello stesso momento?

Stroke Profilo | Junior Member

No, non si creano problemi di concorrenza, la sessione è di proprietà di chi la attiva, per cui potrebbero esserci n session("USR") una per ogni utente senza conflitti.
il problema delle Sessioni è che spesso hanno scadenze in tempo troppo corte e ti trovi facilmente con la sessione scaduta senza renderti conto, ad esempio queste pagine che usiamo per scriverci, se usassero la sessione per mantenere attivo l'utente, e per una ragione qualsiasi lasci la pagina aperta poi ti suona il telefono dopo un tot torni e scrivi la risposta questa andrebbe nel vuoto perchè la tua sessione è scaduta.
Ti riinvito a leggere le formsauthentication, che gestiscono molto meglio queste cose e dal webconfig decidi a priori chi può vedere cosa, rimandando alla pagina login in automatico quando uno non è autorizzato o non è loggato.
ciao
Furio
http://www.opsi.ws

motogpdesmo16 Profilo | Senior Member

Ok. Grazie ancora per il suggerimento.
Seguirò la tua strada e terrò aggiornati...

comunque, a prescindere dalla modalità di autenticazione che ho utilizzato che potrebbe essere obsoleta relativamente alle nuove tecnologie, il problema che ho evidenziato, come te lo spiegheresti??

motogpdesmo16 Profilo | Senior Member

Per il problema descritto ho fatto una maxicagata (si può dire?) io: nel Load della pagina di login avevo inserito
Session.Abandon()
che è la chiamata ad un metodo che non ha bisogno di ulteriori spiegazioni.



Stroke Profilo | Junior Member

La cosa importante è arrivare al risultato.
Se non hai latre domande chiudi il post.
ciao
Furio
http://www.opsi.ws
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5