如何根据 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)
如何使用会话来做到这一点????
根据您在会话中存储的内容,您可以使用它来检索有关用户的数据。由于您没有提供有关如何执行这些操作的任何代码或逻辑,我将进行猜测。
- 从会话中检索值(比如用户 ID)
- 使用会话中的 id 从数据库或列表中获取用户数据
- 根据返回的数据,得到"rank" / "privileged"值,所以说医生是1,家庭是2,用户是3
- 切换排名,根据排名是 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");
}
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) 如何使用会话来做到这一点????
根据您在会话中存储的内容,您可以使用它来检索有关用户的数据。由于您没有提供有关如何执行这些操作的任何代码或逻辑,我将进行猜测。
- 从会话中检索值(比如用户 ID)
- 使用会话中的 id 从数据库或列表中获取用户数据
- 根据返回的数据,得到"rank" / "privileged"值,所以说医生是1,家庭是2,用户是3
- 切换排名,根据排名是 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");
}