Session e Global.asax

lunedì 03 settembre 2007 - 14.59

ely.bise Profilo | Newbie

Ciao a tutti,
Sto cercando di fare in modo di valorizzare delle variabili di sessione all'atto dell'autenticazione per non dover fare un sacco di volte select per tirarmi fuori gli stessi dati.
Così ho pensato di mettere la valorizzazione delle variabili di sessione all'interno del file global.asax, dentro Application_AuthenticateRequest dopo che ho valutato il ruolo dell'utente.
Solo che mi da un errore, precisamente: Stato della sessione non disponibile in questo contesto.
Qual'è il problema? Qualcuno può aiutarmi? Mi risparmierebbe parecchie noie poter fare select una volta sola, anche perchè poi ho pagine diverse per ogni tipo di gruppo, ruolo utente.
Grazie mille

protected void Application_AuthenticateRequest(Object sender,EventArgs e)
{
if (Request.IsAuthenticated)
{
string CodApplicazione = System.Configuration.ConfigurationManager.AppSettings["CodApplicazione"].ToString();
string CodAgenzia = System.Configuration.ConfigurationManager.AppSettings["CodAgenzia"].ToString();

System.Data.SqlClient.SqlConnection cnn = new System.Data.SqlClient.SqlConnection();
cnn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnAttiva"].ConnectionString;
cnn.Open();

String selectQry = "Select cpgroups.name " +
"from " + CodApplicazione + "UtenteLogin inner join cpusers on UlCodiceCpuser=cpusers.code " +
"inner join cpusrgrp on cpusrgrp.usercode = cpusers.code " +
"inner join cpgroups on cpgroups.code = cpusrgrp.groupcode " +
"where UlUserName = '" + User.Identity.Name + "'";

System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(selectQry, cnn);
System.Data.SqlClient.SqlDataReader rdr = cmd.ExecuteReader();

// creazione dell'array contenente i gruppi a cui appartiene l'utente
ArrayList Ruoli = new ArrayList();
while (rdr.Read()) {
Ruoli.Add(rdr["name"].ToString().Trim());
}

rdr.Close();

//select per estrarre le variabili di sessione
selectQry = "select UlCodice, UaCodiceContatto, UaCodiceFiliale " +
"from " + CodApplicazione + "UtenteLogin inner join " + CodApplicazione + "UtenteAgenzia " +
" on UlCodice = UaCodice and UaAgenziaFiliale = '" + CodAgenzia + "' " +
"where UlDisabilitato <> 'S' and UlUserName = '" + User.Identity.Name + "' ";

cmd = new System.Data.SqlClient.SqlCommand(selectQry, cnn);
rdr = cmd.ExecuteReader();

if (rdr.Read())
{
//salvo le variabili di sessioni globali
Session["CodFilialeUtente"] = Convert.ToString(rdr["UaCodiceFiliale"]);
Session["CodUtente"] = Convert.ToInt32(rdr["UlCodice"]);
Session["CodPersona"] = Convert.ToString(rdr["UaCodiceContatto"]);

}

rdr.Close();
cnn.Close();

String[] StringRuoli; //= new String[Ruoli.Count];
StringRuoli = (String[])Ruoli.ToArray(typeof(String));


HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(HttpContext.Current.User.Identity, StringRuoli);
}
}
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5