【问题标题】:Asp.net Session Variable from SQL DBSQL DB 中的 Asp.net 会话变量
【发布时间】:2008-11-12 21:53:55
【问题描述】:

我使用表单身份验证创建了一个自定义登录页面,并使用 SQL DB 来存储用户数据。我能够从用户名创建一个会话变量,但想知道是否可以提取一个单独的字段并基于该字段创建一个会话变量。我希望会话变量基于 SalesNumber 一个 5 位十进制字段。请给我任何cmets或建议。

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

谢谢....

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    另外请记住,您可以在会话中存储整个对象而不是单独的变量:

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

    要添加,您可以将其包装在一个不错的属性中:

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

    【讨论】:

      【解决方案2】:

      当您从数据库查询中获取 SalesNumber 时,只需使用

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

      或者我在问题中还遗漏了什么......?

      【讨论】:

        【解决方案3】:

        在您的 DAL 中创建您的登录序列,如:

        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;
        }
        

        从您的代码中,只需在登录按钮单击事件中添加

        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
        }
        

        【讨论】:

          猜你喜欢
          • 2011-11-09
          • 1970-01-01
          • 2012-03-26
          • 2018-05-20
          • 2010-09-10
          • 1970-01-01
          • 1970-01-01
          • 2011-05-19
          相关资源
          最近更新 更多