Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在asp.net c中使用会话验证登录级别#_C#_Asp.net - Fatal编程技术网

C# 在asp.net c中使用会话验证登录级别#

C# 在asp.net c中使用会话验证登录级别#,c#,asp.net,C#,Asp.net,我有一个使用asp.net c#创建的简单登录页面。我试图做的是检索用户级别并将其分配给会话,然后根据该级别重定向到相应的页面。但是当我登录时,什么也没发生。。下面是我的代码。有人能告诉我我的代码有什么问题吗 con.Open(); com.CommandText = "Select * from deatls Where c_id = '" + TextBox1.Text + "' and password = '" + TextBox2.Text + "'";

我有一个使用asp.net c#创建的简单登录页面。我试图做的是检索用户级别并将其分配给会话,然后根据该级别重定向到相应的页面。但是当我登录时,什么也没发生。。下面是我的代码。有人能告诉我我的代码有什么问题吗

 con.Open();
        com.CommandText = "Select * from deatls Where c_id = '" + TextBox1.Text + "' and password = '" + TextBox2.Text + "'";
        com.CommandType = CommandType.Text;
        com.Connection = con;

        SqlDataReader sqlread = com.ExecuteReader();


        if (sqlread.Read())
        {
            Session["level"] = sqlread["level"];   
        }


        if ((int)Session["level"] == '1') 

            Response.Redirect("customer_menu.aspx");

        if ((int)Session["level"] == '2' )

            Response.Redirect("front.aspx");

        if  ((int)Session["level"] == '3')

            Response.Redirect("manager.aspx");

        else  
            Response.Redirect("login.aspx");

        con.Close();

首先,您要将
会话[“level”]
强制转换为
int
,然后检查与
字符串的相等性(或尝试)。其次,要检查的值使用单引号。此代码是否编译?您是否有异常处理功能?我的猜测是,它会出错,根本不会运行。你能发布完整的代码吗


他们是对的。您应该首先尝试从要检查的整数值中删除单引号。

首先,您要将
会话[“level”]
转换为
int
,然后检查是否与
字符串相等(或尝试)。其次,要检查的值使用单引号。此代码是否编译?您是否有异常处理功能?我的猜测是,它会出错,根本不会运行。你能发布完整的代码吗


他们是对的。您应该首先尝试从要检查的整数值中删除单引号。

您的代码需要一个
switch
语句,如下所示:

switch (Session["level"].ToString())
{
    case "1":
        Response.Redirect("customer_menu.aspx");
        break;
    case "2":
        Response.Redirect("front.aspx");
        break;
    case "3":
        Response.Redirect("manager.aspx");
        break;
    default:
        Response.Redirect("login.aspx");
        break;
}

您的代码需要一个
开关
语句,如下所示:

switch (Session["level"].ToString())
{
    case "1":
        Response.Redirect("customer_menu.aspx");
        break;
    case "2":
        Response.Redirect("front.aspx");
        break;
    case "3":
        Response.Redirect("manager.aspx");
        break;
    default:
        Response.Redirect("login.aspx");
        break;
}


op是根据字符而不是字符串检查int。此外,由于SQL注入的可能性,通常避免使用这种类型的用户身份验证查询。你应该读一读。单引号需要删除,因为该值被强制转换为int。单引号是错误的,,现在修复它。。。谢谢:)op正在根据字符而不是字符串检查int。此外,由于SQL注入的可能性,通常避免使用这种类型的用户身份验证查询。你应该读一读。单引号需要删除,因为该值被强制转换为int。单引号是错误的,,现在修复它。。。谢谢:)这是一些真正有安全缺陷的SQL代码。请不要在生产中使用它,这正是黑客试图做的事情。为什么不使用调试器进行调试,检查查询返回的内容,检查
Session[“level”]
gets assigned等@LiveEn:如果sqlread.Read()返回false会发生什么?你需要测试这个案例。顺便说一句,LiveEn…你真的应该看看ASP.NET的内置安全功能。您实际上是在这里滚动您自己的用户和角色框架。如果你想,作为一个学习练习,那就这样吧。但是还有更好的方法。这是一些真正有安全缺陷的SQL代码。请不要在生产中使用它,这正是黑客试图做的事情。为什么不使用调试器进行调试,检查查询返回的内容,检查
Session[“level”]
gets assigned等@LiveEn:如果sqlread.Read()返回false会发生什么?你需要测试这个案例。顺便说一句,LiveEn…你真的应该看看ASP.NET的内置安全功能。您实际上是在这里滚动您自己的用户和角色框架。如果你想,作为一个学习练习,那就这样吧。但是有更好的方法,我完全同意。我当然会在这里使用switch语句,我完全同意。我当然会在这里使用switch语句。