我的课程有问题:
我想在没有Session的情况下持有UserID,当然还有Querystring,我想我可以将它存储在我的UserClass中。
因此,当我尝试获取ID时,例如:Default.aspx:
MyUserClass userclass=new MyUserClass();//global
//(at button click)
userclass.GetUser(TextBox1.Text, TextBox2.Text);
int UserID=userclass.UserID;
当我重新加载页面UserID = 0,我没问题。然后我尝试使用静态变量。例如:
static MyUserClass userclass=new MyUserClass(); //global
//(at button click)
userclass.GetUser(TextBox1.Text, TextBox2.Text);
int UserID=userclass.UserID;
我在重新加载页面时获得了ID,但是当其他人登录时,我的ID会随着其他ID而改变
我怎么能用这种方式做到这一点,或者我的意思是属性?
课程是:
public class MyUserClass
{
private int _UserID;
public int UserID
{
get
{
return _UserID;
}
}
public int GetUser(string UserName, string Pass)
{
int UserID=0;
try
{
DB.conn.Close();
SqlCommand command = new SqlCommand("pUserkontrol", DB.conn);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@puserName", UserName);
command.Parameters.AddWithValue("@pPass", Pass);
DataTable dt = new DataTable();
DB.conn.Open();
SqlDataReader dr = command.ExecuteReader();
dt.Load(dr);
DB.conn.Close();
if (dt.Rows.Count < 1)
{
}
else
{
foreach (DataRow datarow in dt.Rows)
{
_UserID = Convert.ToInt32(datarow["UserID"]);
//UserID = _UserID;
}
}
}
catch (Exception ex)
{
}
return UserID;
}
}
答案 0 :(得分:0)
网络本质上是无状态的,因此每个新请求都“覆盖”UserId值,因为它没有任何东西可以将请求绑定回您的班级。您需要使用某种存储机制。当您使用会话和查询字符串打折时,我建议您使用自己的轻量级ASP.NET成员资格提供程序并实施IIdentity和IPrincipal,并通过提供程序创建身份验证故障单(Cookie)以保留您的登录后详细信息(userId)。看看Brady Gasters博客以及那里发布的评论如何做到这一点。
http://www.bradygaster.com/custom-authentication-with-mvc-3.0
这篇文章使用Sessions实现了MVC 3的成员身份,但页面上的注释和其他链接显示了如何操作代码并使用cookie身份验证。在Web窗体中实现它(如果你使用webforms)也应该相当简单。