我已登录我的asp页面请求名称/传递和按钮。
我在我的数据库和SqlDataSource
创建了一个连接字符串,并在SqlDataSource
中提供了查询:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:CarRentalConnectionString %>"
SelectCommand="SELECT * FROM [Customers] WHERE (([UserName] = @UserName) AND ([PassWord] = @PassWord))">
<SelectParameters>
<asp:ControlParameter ControlID="uname" Name="UserName" PropertyName="Text" Type="String" />
<asp:ControlParameter ControlID="pass" Name="PassWord" PropertyName="Text" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
我的问题是我不知道如何激活/执行它以及如何获取查询返回的数据?
我有一种感觉,这是错误的方式(希望是错的)
希望你们中的一位能给我一个提示或指出我正确的方向:)
提前致谢
答案 0 :(得分:1)
使用SqlDataSource是不合适的,因为您不是简单地以明确的方式检索数据。您需要在程序上定义用户验证(而非验证)逻辑。
通常的方法如下。请注意,您应该对密码进行哈希处理,而不是将其存储在纯文本中。为简洁起见,省略了哈希盐渍。
public static Boolean Authenticate(String userName, String password) {
using(SqlConnection c = new SqlConnection("myConnectionString")
using(SqlCommand cmd = c.CreateCommand()) {
c.Open();
cmd.CommandText = "SELECT UserName, PasswordHash, OtherDataEtc FROM Users WHERE UserName = @userName";
cmd.Parameters.Add("@userName", SqlDbType.Varchar, 50).Value = userEnteredUserName;
using(SqlDataReader rdr = cmd.ExecuteReader()) {
if( !rdr.Read() ) return false; // no matching user found
Byte[] passwordHash = rdr.GetBytes( 1 );
Byte[] hash = Hash( userEnteredPassword ); // Use at least SHA1
return Array.Equals( passwordHash, hash );
}
}
}
// Usage in ASP.NET:
public override OnPageLoad(Object sender, EventArgs e) {
if( IsPostBack ) {
Validate();
if( IsValid ) {
Boolean auth = Authenticate( this.userName, this.password ); // member textbox controls
if( auth ) {
FormsAuthentication.SetAuthCookie( this.userName, true );
FormsAuthentication.RedirectFromLoginPage("somewhere", true);
} else {
Response.Redirect("loginFailedPage");
}
}
}
}