我的登录控件不再按预期工作。它从数据库中提取用户名和密码,然后将用户重定向到 Home.aspx。可悲的是,重定向不会发生。它确实将其添加到 url 的末尾,但没有任何反应
ReturnUrl=%2fHome.aspx
这是缩短的ASP代码
<asp:Login ID="Login1" runat="server" OnAuthenticate= "ValidateUser"
DestinationPageUrl="~/Home.aspx"> </asp:Login>
加上.cs代码
protected void ValidateUser(object sender, AuthenticateEventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DB_CONNE"].ConnectionString);
con.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM Users WHERE Username =@Username and Password=@Password", con);
cmd.Parameters.AddWithValue("@Username", Login1.UserName);
cmd.Parameters.AddWithValue("@Wachtwoord", Login1.Password);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
Session["Uname"] = Login1.UserName;
if (dt.Rows.Count > 0)
{
Response.Redirect("Home.aspx");
}
我一直在研究未登录的用户无法访问某些页面的功能,但我不确定这是否是搞砸它的原因。
在摆弄了一下之后,我注意到拒绝用户似乎对它有影响,但不知道任何其他方法来重定向非登录尝试。
任何帮助将不胜感激!
查看您的代码,在 sql 命令中,您的查询将密码参数定义为@Password
,同时将其添加到您@Wachtwoord
的 cmd 参数集合中,而不是@Password。
以下是更新的代码:
SqlCommand cmd = new SqlCommand("SELECT * FROM Users WHERE Username =@Username and Password=@Password", con);
cmd.Parameters.AddWithValue("@Username", Login1.UserName);
cmd.Parameters.AddWithValue("@Password", Login1.Password);
此外,您可以使用 FormsAuthentication.GetRedirectURL 获取返回 URL,而不是总是重定向到主页.aspx而是。因此,如果您尝试访问某些受保护的页面.aspx而不登录,用户将被重定向到Login.aspx?ReturnUrl=protected.aspx
登录后用户将被重定向到受保护.aspx页面。
if (dt.Rows.Count > 0)
{
Response.Redirect(FormsAuthentication.GetRedirectUrl( Login1.UserName, false));
}