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

时间:2015-03-16 16:50:33

标签: asp.net session redirect response.redirect

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(),

这是班级

我有3个用户 医生 管理 家庭 我需要用户登录时 如果他是医生重定向到页面(doctor.aspx)其他 如果他是管理员重定向到页面(admin.aspx) 如何使用session ????

来做到这一点

3 个答案:

答案 0 :(得分:0)

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

  1. 从会话中检索值(说出用户ID)
  2. 使用会话中的id从数据库或列表中获取用户数据
  3. 随着返回的数据,得到“排名”/“特权”值,所以说医生是1,家庭是2,用户是3
  4. 按等级切换,取决于是否为1,2或3,相应地重定向。
  5. 希望这会帮助你。

答案 1 :(得分:0)

定义登录类..

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");
}

EDIT2: 登录后创建一个公共主页。

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");
} 
}
}

答案 2 :(得分:0)

好的,您收到错误是因为会话为空。我无法相信您的登录代码会在您排队并返回新会员时进行编译。其次是属性设置线是不正确的。但是,除此之外我会建议您的问题是由您的Login方法引起的。

我这样写:

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'根据您当前的代码。取决于您可以拥有的用户类型'将取决于你检查的内容。如果您有类似于' Doctor'那么你可能想确保修剪空白并且你的支票不区分大小写,例如:

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