private void Button1_Click(object sender, System.EventArgs e)
{
string sxname,sxpwd;
sxname = TextBox1.Text;
sxpwd = TextBox2.Text;
if(Authenticate(sxname,sxpwd))
{
Response.Redirect("sx_teacher_nfo/sxteacherinfo.aspx");
}
else
{
Response.Write("请仔细检查,再试一次。");
}
}public override bool Authenticate(string username, string password)
{

SqlConnection conn = new SqlConnection ("server=localhost;" + "database=sx;Trusted_Connection=Yes");
SqlDataReader iDr;
try
{
string sSql;
sSql="select * from sx_logo where sx_logon='"+username+"' and sx_pwd='"+password+"'";
SqlCommand iCmd=new SqlCommand(sSql,conn);
conn.Open();
iDr=iCmd.ExecuteReader(); if(iDr.HasRows)
{
return true;
//Response.Redirect("sx_teacher_nfo/sxteacherinfo.aspx");
}
else
{
return false;
//Response.Write("你输入有误,请在试一次。");
} }
catch(Exception Ex)
{
Response.Write(Ex.ToString());
return false;
}
finally{
conn.Close();
} } 
======================================================================================
这是web.config中的设置
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    
  <system.web>    <!--  动态调试编译
          设置 compilation debug="true" 以启用 ASPX 调试。否则,将此值设置为
          false 将提高此应用程序的运行时性能。
          设置 compilation debug="true" 以将调试符号(.pdb 信息)
          插入到编译页中。因为这将创建执行起来
          较慢的大文件,所以应该只在调试时将此值设置为 true,而在所有其他时候都设置为
          false。有关更多信息,请参考有关
          调试 ASP.NET 文件的文档。
    -->
    <compilation 
         defaultLanguage="c#"
         debug="true"
    />    <!--  自定义错误信息
          设置 customErrors mode="On" 或 "RemoteOnly" 以启用自定义错误信息,或设置为 "Off" 以禁用自定义错误信息。 
          为每个要处理的错误添加 <error> 标记。          "On" 始终显示自定义(友好的)信息。
          "Off" 始终显示详细的 ASP.NET 错误信息。
          "RemoteOnly" 只对不在本地 Web 服务器上运行的
           用户显示自定义(友好的)信息。出于安全目的,建议使用此设置,以便 
           不向远程客户端显示应用程序的详细信息。
    -->
    <customErrors 
    mode="RemoteOnly" 
    />     <!--  身份验证 
          此节设置应用程序的身份验证策略。可能的模式是 "Windows"、 
          "Forms"、 "Passport" 和 "None"          "None" 不执行身份验证。 
          "Windows" IIS 根据应用程序的设置执行身份验证 
            (基本、简要或集成 Windows)。在 IIS 中必须禁用匿名访问。
          "Forms" 您为用户提供一个输入凭据的自定义窗体(Web 页),然后 
           在您的应用程序中验证他们的身份。用户凭据标记存储在 Cookie 中。
          "Passport" 身份验证是通过 Microsoft 的集中身份验证服务执行的,
           它为成员站点提供单独登录和核心配置文件服务。
    -->
    <authentication mode="Forms"> 
<!--    <forms     name=".ASPXAUTH" 
                   loginUrl="login.aspx"     
                   protection="All"
                   timeout="30" 
                   
                   ></forms>   -->
         </authentication>          
    
<!--  授权 
           此节设置应用程序的授权策略。可以允许或拒绝不同的用户或角色访问
          应用程序资源。通配符: "*" 表示任何人,"?" 表示匿名
          (未经身份验证的)用户。
    -->    <authorization>
    <deny users="?"/>
    </authorization>如果web.config按默认的形式的话,他能正确的定向到其它页面,但如果按上面的设置的话,即使我输入正确的用户名和密码也不能定向到会员区的页面,还是回到原来的登录页面,我估计可能authenticate方法的重定是不是有误,但不知要怎么改,请教 一下大家

解决方案 »

  1.   

    if(Authenticate(sxname,sxpwd))
    {
    Response.Redirect("sx_teacher_nfo/sxteacherinfo.aspx");
    }?????
    下文呢?登陆成功,你没有处理?
      

  2.   

    FormsAuthentication.RedirectFromLoginPage(UserName.Text, Remember.Checked)
      

  3.   

    SqlCommand iCmd=new SqlCommand(sSql,conn);
    conn.Open();
    iDr=iCmd.ExecuteReader();这里有没有问题? conn 你前面已经打开过了吧?
      

  4.   

    对于数据库的连接应该是用完即关的.To: lindping(罗将神) ,我觉得即便他前面已经打开过了conn ,也应该是关闭了的.
    感觉程序结构上没有什么问题的啊.
    至于web.config中的设置,就不是很了解了,请高手赐教...
      

  5.   

    sSql="select * from sx_logo where sx_logon='"+username+"' and sx_pwd='"+password+"'";
    建议不要这样写sql语句,尤其在验证的时候,有潜在的危险。
    建议采用duwamish中验证用的sql语句。
      

  6.   

    既然你在web.config文件中配置了authentication 属性,需要在Response.Redirect("sx_teacher_nfo/sxteacherinfo.aspx");前加一行代码:
    FormsAuthentication.SetAuthCookie(sxname,false);,以便给认证用的cookies"ASPXAUTH"赋值.因为你没写这一行,认证未通过,系统会自动返加login.aspx页面.
      

  7.   

    好亲切的代码阿
    没错:craker最喜欢的代码莫过如此!
    假如用户输入
    ' delete from sx_logo --
    我想你再也没有用户可以通过了。