2008-11-12 7 views
2

J'ai créé une page de connexion personnalisée à l'aide de l'authentification par formulaires et d'une base de données SQL pour stocker les données utilisateur. Je suis capable de créer une variable de session à partir du nom d'utilisateur, mais je me demande s'il est possible de tirer un champ séparé et de créer une variable de session basée sur cela. Je voudrais que la variable de session soit basée sur un SalesNumber un champ décimal de 5 chiffres. Merci de me faire part de vos commentaires ou suggestions.Variable de session Asp.net de la base de données SQL

cmd = new SqlCommand("Select pwd,SalesNumber from users where [email protected]", conn); 
cmd.Parameters.Add("@userName", System.Data.SqlDbType.VarChar, 25); 
cmd.Parameters["@userName"].Value = userName; 
Session["userName"] = userName; 

Merci ....

Répondre

1

Gardez à l'esprit que vous pouvez stocker un objet entier dans la session au lieu de séparer les variables:

UserObject user = DAL.GetUserObject(userName); 
Session["CurrentUser"] = user; 
// Later... 
UserObject user = Session["CurrentUser"] as UserObject; 
// ... 

Pour ajouter, vous pouvez envelopper dans un ni Propriété:

private UserObject CurrentUser 
{ 
    get 
    { 
      return this.Session["CurrentUser"] as UserObject; 
    } 
    set 
    { 
      this.Session["CurrentUser"] = value; 
    } 
} 
1

Lorsque vous obtenez le SalesNumber de votre requête de base de données, il suffit d'utiliser

Session["SalesNumber"] = <the value of the SalesNumber column from the query> 

Ou est-il autre chose qui me manque dans la question ... ?

1

dans votre DAL il suffit de créer votre séquence de connexion comme:

public bool LoginUser(String username, String password) 
{ 
    bool r = false; 
    using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConn"].ConnectionString)) 
    { 
     using(SqlCommand cm = new SqlCommand()) 
     { 
      cm.Connection = cn; 
      cm.CommandType = CommandType.Text; 
      cm.CommandText = "SELECT Name, SalesNumber FROM users WHERE uname = @username AND pwd = @password;"; 
      cm.Parameters.AddWithValue("@username", username); 
      cm.Parameters.AddWithValue("@password", password); 

      cn.Open(); 
      SqlDataReader dr = cm.ExecuteReader(); 

      if (dr.HasRows) 
      { 
       // user exists 
       HttpContext.Current.Session["SalesNumber"] = dr["SalesNumber"].ToString(); 
       HttpContext.Current.Session["Username"] = username; 
       HttpContext.Current.Session["Name"] = dr["Name"].ToString(); 

       r = true; 
      } 
      else 
      { 
       // Clear all sessions 
       HttpContext.Current.Session["SalesNumber"] = ""; 
       HttpContext.Current.Session["Username"] = ""; 
       HttpContext.Current.Session["Name"] = ""; 
      } 
     } 
    } 
    return r; 
} 

de votre code, en cas bouton de connexion de clic suffit d'ajouter

if (dalLogin.LoginUser(TextBoxUsername.Text.Trim(), TextBoxPassword.text.Trim())) 
{ 
    // User logged in sucessfuly 
    // all sessions are available 
    Response.Redirect("homepage.aspx"); 
} 
else 
{ 
    // Username and password did not match! show error 
} 
Questions connexes