我实现了一个非常基本的登录系统,而不是实际使用任何outofthebox登录控件。我的数据库包含以下表格:
UserProfiles:包含用户的详细信息 UserSecurityRoles:包含每个用户的安全角色
在我的asp.net应用程序中,我使用以下代码登录用户:
protected void Logon_Click(object sender, EventArgs e)
{
if (_BLSecurity.verifyUser(UserName.Text, UserPass.Text))
{
Response.Redirect("../Default.aspx");
}
else
{
Msg.Text = "Invalid credentials. Please try again.";
}
}
一旦用户被验证,我需要在我的Web应用程序中存储UserProfiles和UserSecurityRoles中包含的有关他的信息,以便我可以从我拥有的每个表单访问这些数据并根据它设置权限。
我有什么想法可以执行此操作?
答案 0 :(得分:1)
您可以将UserProfilesData存储在会话中。每个用户都有一个与他相关的唯一会话。
protected void Logon_Click(object sender, EventArgs e)
{
if (_BLSecurity.VerifyUser(UserName.Text, UserPass.Text))
{
Session["currentUserProfile"] = GetUserProfile();
Response.Redirect("../Default.aspx");
}
else
{
Msg.Text = "Invalid credentials. Please try again.";
}
}
然后,只要您需要UserProfile对象,就可以使用currentUserProfile键从Session获取它。
var userProfile = (UserProfile)Session["currentUserProfile"];
答案 1 :(得分:1)
您可以为示例SessionContext
创建自定义类,您可以在其中保存登录时所需的所有数据。之后,您可以创建每个UI.Page继承的类。在本课程中,您将拥有SessionContext
属性。
public SessionContext USession
{
get
{
if (base.Session["_USRSESS"] != null)
return (BO.SessionContext)base.Session[_USRSESS];
return null;
}
set
{
base.Session["_USRSESS"] = value;
}
}
当您需要这个用户数据时,您将在每个页面中调用此属性。在这里保存一个自定义类可以在会话中放置您想要的所有内容,而不需要记住多个会话变量。
修改强>
如果您有BasicPage类
public class BasicPage : System.Web.UI.Page
{
public SessionContext USession
{
get
{
if (base.Session["_USRSESS"] != null)
return (BO.SessionContext)base.Session[_USRSESS];
return null;
}
set
{
base.Session["_USRSESS"] = value;
}
}
}
public partial class _Default : BasicPage
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
请参阅aspx.pages继承BasicPage
和BasicPage
继承UI.Page
。
当您重定向到默认页面时,您将需要类似的内容:
SessionContext resSession = new SessionContext();
// I'm giving you example with standard bool property. You can put class property if you want.
resSession.IsAdmin = Convert.ToInt32(userRow["IsAdmin"]) == 1;
// this is Guid property for the User primary key, if you are using integer for primary key the property should be int.
resSession.UserID = (Guid)userRow["ID"];
BasicPage page = this.Page as BasicPage;
page.UserSession = session;
Response.Redirect("../Default.aspx");