Καλησπέρα. Προσπαθώ να φτιάξω ενα project με asp.net και έχω κολλήσει σε ένα θεματάκι με το Session κ το UserId του χρήστη. Χρησιμοποιώ την default db που κατασκευάζει το asp.net για το authentiacation.
Θέλω λοιπον να αποθηκεύω στο Session το UserId (uniqueidentifier) του χρήστη μόλις κάνει login για εκτελώ κάποια queries στη συνέχεια. Το πρόβλημα είναι ότι αν κάνω συνεχόμενα logins και logouts δεν γράφεται πάντα η τιμη στο Session και μερικές φορές μένει Null και πετάει Exception. Παραθέτω τον κώδικα που χρησιμοποιώ:
στο login control εχω προσθέσει στο LoggedIn Event το εξής:
protected void Login1_LoggedIn(object sender, EventArgs e)
{
string connString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
string sql =
"SELECT top 1 UserId FROM aspnet_Users WHERE UserName = '" + User.Identity.Name.ToString() + "'";
using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
string userIdentifier = cmd.ExecuteScalar().ToString();
Session.Add("userId", userIdentifier);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
conn.Close();
}
}
}
ενώ για να πάρω την τιμή από το Session:
string userIdentity = Session.Contents["userId"].ToString();
το οποίο πετάει NullValueException (ή κατι τέτοιο..)
Και τέλος στο logout γράφω το εξής:
protected void LoginStatus1_LoggingOut(object sender, LoginCancelEventArgs e)
{
Session.Remove("userId");
}
Πραγματικά παρακαλώ για οποιαδήποτε βοηθεια γιαιτ είναι λίγο επείγον το θε΄μα απο αποψη χρονου