如何根据 asp 中的会话数据将用户重定向到不同的页面

How can I redirect users to different pages based on session data in asp

protected void btnLogin_Click(object sender, EventArgs e)
{
    Member E = new Member();
    E = E.Login(txtEmail.Text, txtPassword.Text);
    Session["user"] = E;
    if (Session["user"] != null)
    {
        E = (Member)Session["user"];
        if (E.UserType == "Doctor")
        {
            Response.Redirect("Donate.aspx");
        }
        else if (E.UserType == "admin")
        {
            Response.Redirect("admin.aspx");
        }
        else
        {
            Response.Redirect("user.aspx");
        }
    }
    else

    {
        lblMessage.ForeColor = System.Drawing.Color.Red;
        lblMessage.Text = "Invalid Email / password";
    }    
}
}

这是登录

public Member Login(string Email, string Password)
{
    string constr = "Data Source = YAZAN-PC ; initial catalog = Aged ; user = sa; pwd = yazan7;";
    SqlConnection conn = new SqlConnection(constr);
    SqlDataAdapter da = new SqlDataAdapter("Authenticate", conn);
    da.SelectCommand.CommandType = System.Data.CommandType.StoredProcedure;
    da.SelectCommand.Parameters.AddWithValue("@Email", Email);
    da.SelectCommand.Parameters.AddWithValue("@Password", Password);
    DataTable dt = new DataTable();
    conn.Open();
    da.Fill(dt);
    conn.Close();
    if (dt.Rows.Count > 0)
        return new Member
ID = int.Parse(dt.Rows[0]["ID"].ToString()),
            FName = dt.Rows[0]["FName"].ToString(),
            LName = dt.Rows[0]["LName"].ToString(),
            Email = dt.Rows[0]["Email"].ToString(),         
            Gender = dt.Rows[0]["Gender"].ToString(),
            Password = dt.Rows[0]["Password"].ToString(),
            RePassword = dt.Rows[0]["RePassword"].ToString(),
            UserType = dt.Rows[0]["UserType"].ToString(),
            BirthDate = dt.Rows[0]["BirthDate"].ToString(),

这是class

我有3个用户 医生 行政 家庭 当用户登录时我需要 如果他是医生重定向到页面 (doctor.aspx) else 如果他是管理员重定向到页面 (admin.aspx) 如何使用会话来做到这一点????

根据您在会话中存储的内容,您可以使用它来检索有关用户的数据。由于您没有提供有关如何执行这些操作的任何代码或逻辑,我将进行猜测。

  1. 从会话中检索值(比如用户 ID)
  2. 使用会话中的 id 从数据库或列表中获取用户数据
  3. 根据返回的数据,得到"rank" / "privileged"值,所以说医生是1,家庭是2,用户是3
  4. 切换排名,根据排名是 1、2 还是 3,相应地重定向。

希望对您有所帮助。

定义一个登录名class..

class dcLogin
{
public id string{get;set;}
public name string{get;set;}
public type string{get;set;}
}

当用户登录时.. 设置

dcLogin  objLog=new dcLogin(); 
objLog.id=userid; objLog.name=username; 
objLog.type='usertype'--admin/doctor/user

session["loginuser"]=objLog;

现在您可以随时查看用户类型。

dcLogin  objLog=(dcLogin)session["loginuser"];
if(objLog.type=="admin")
{
response.redirect("admin.aspx");
}

编辑2: 登录后创建一个公共主页。

loginhome.aspx

protected void page_lod()
{
 if(session["user"]!=null)
 {
   Member E=(Member)session["user"];
if(E.UserType =="Doctor")
{
  response.rediter("doctor.aspx");
}
else if(E.UserType =="admin")
{
  response.rediter("admin.aspx");
}
else
{
 response.rediter("user.aspx");
} 
}
}

好的,您收到错误消息是因为会话为空。我无法相信您的登录代码可以编译,因为您在第 'return new member' 行后跟 属性 行设置不正确。但是,除此之外,我建议您的问题是由您的登录方法引起的。

我会这样写:

public Member Login(string Email, string Password)
{
    string constr = "Data Source = YAZAN-PC ; initial catalog = Aged ; user = sa; pwd = yazan7;";

    DataTable dt = new DataTable();
    using(SqlConnection conn = new SqlConnection(constr))
    {
        SqlDataAdapter da = new SqlDataAdapter("Authenticate", conn);
        da.SelectCommand.CommandType = System.Data.CommandType.StoredProcedure;
        da.SelectCommand.Parameters.AddWithValue("@Email", Email);
        da.SelectCommand.Parameters.AddWithValue("@Password", Password);
        da.Fill(dt);
    }

    Member m = new Member();

    if (dt.Rows.Count > 0)
    {
        //Set member properties
        m.ID = int.Parse(dt.Rows[0]["ID"].ToString());
        m.FName = dt.Rows[0]["FName"].ToString();
        m.LName = dt.Rows[0]["LName"].ToString();
        m.Email = dt.Rows[0]["Email"].ToString();         
        m.Gender = dt.Rows[0]["Gender"].ToString();
        m.Password = dt.Rows[0]["Password"].ToString();
        m.RePassword = dt.Rows[0]["RePassword"].ToString();
        m.UserType = dt.Rows[0]["UserType"].ToString();
        m.BirthDate = dt.Rows[0]["BirthDate"].ToString();

        //add any other properties needed to be filled.
    }

    return m;
}

然后您将根据当前代码使用 'UserType'。根据您可以为 'UserType' 设置的值将取决于您检查的内容。如果您有像 'Doctor' 这样的值,那么您可能需要确保您正在修剪白色 space 并且您的支票不区分大小写,例如:

if (E.UserType.Trim().Equals("Doctor", StringComparison.InvariantCultureIgnoreCase))
{
    Response.Redirect("Donate.aspx");
}