如何比较会话的值?asp.net

本文关键字:asp net 会话 何比较 比较 | 更新日期: 2023-09-27 18:03:09

我找不到如何比较会话值的方法。

查询数据库:

 conexion.Open();
        SqlCommand comando = new SqlCommand("SELECT id_cliente,alias,area FROM tbleuser WHERE usuario=@username AND pass=@thepassword",conexion);
        comando.Parameters.AddWithValue("@username",user.Text);
        comando.Parameters.AddWithValue("@thepassword", pas.Text);
        SqlDataReader r = comando.ExecuteReader();

        while(r.Read())
        {
            Session["UsuarioId"] = r["id_cliente"].ToString();
            Session["AreaUsuario"] = r["area"].ToString();
            Session["AliasUsuario"] = r["alias"].ToString();
           checkUser();
        } 

checkUser方法应该与Alias字段比较用户的类型,下面是我使用的选项。

<标题> 1
if(Session["AliasUsuario"].ToString() == "Doctors")
{
//not working
}
<标题> 2 h1> 3
if(Convert.ToString(Session["AliasUsuario"]).Equals("Doctors"))
{
//not working
}
<标题> 4
if(Session["AliasUsuario"].ToString().Equals("Doctors"))
{
//not working
}

有什么建议吗?在继续之前,我需要知道是什么样的用户登录。由于

如何比较会话的值?asp.net

From MSDN:


返回值类型:系统。布尔
true如果有更多的行;否则

现在,如果您的命令返回多个行,则可能会设置与预期值不同的值。这是需要注意的。

从你的评论看来,你可能试图在它被设置之前读取会话变量。

也很有可能值Doctors已经滑进数据库与空白字符('r, 'n, 'r'n, space),这往往是不可见的数据库工具,如SQL Server管理工作室。要检查是否存在这种情况,可以使用如下命令:

if(Session["AliasUsuario"] != null)
{
    if (Session["AliasUsuario"].ToString().ToLower().Contains("doctors"))
    {
        // that's the case
    }
}

也试着检查while循环后Session["AliasUsuario"]的值是什么。一个简单的断点就可以做到。

如果SqlDataReader r = comando.ExecuteReader();没有返回任何行,则不设置session,因此无法读取任何内容
我会这样写:

if (r.HasRows)
{
    while(r.Read())
    {
        Session["UsuarioId"] = r["id_cliente"].ToString();
        Session["AreaUsuario"] = r["area"].ToString();
        Session["AliasUsuario"] = r["alias"].ToString();
        checkUser();
    }   
}
else
{
        Session["UsuarioId"] = "none";
        Session["AreaUsuario"] = "none";
        Session["AliasUsuario"] = "none";
}

看起来可能忽略了一个简单的错误:字符串比较是区分大小写的(除非您另有指定)。

也许你在比较单数和复数(Doctor vs Doctors)?

第三,配置文件中的键也将区分大小写。所以AliasUsuarioAliasusuario是不一样的