我正在用 C# 中的 VS2010 开发一个 WebForms Web 应用程序。我使用自定义登录方法对用户进行身份验证,并且我不想使用 Membership 框架。用户登录后,我想将用户数据存储为用户 ID、用户名、姓氏、电子邮件等,以便在所有页面的用户会话期间访问它们。
我怎样才能做到这一点?我不想将用户数据存储UserData
在FormsAuthenticationTicket
.
我发现了这种方法:我应该在会话中存储用户数据还是使用自定义配置文件提供程序?,但我不明白如何实现它。
我有一些问题:
1)在我使用的数据库上检查凭据后在我的登录页面中对用户进行身份验证:FormsAuthentication.SetAuthCookie(txtUserName.Value, true); 现在在我的默认页面中:
FormsAuthenticationTicket ticket = ((FormsIdentity)(User.Identity)).Ticket; 我使用 ticket.Name 来显示用户名。这是对的吗?你为什么谈论线程使用 Thread.CurrentPrincipal.Identity.Name ?
2)我在 global.asax 文件中有这个代码来读取用户角色并将它们存储到 HttpContext 中:
void Application_AuthenticateRequest(对象发送者,EventArgs e){
if (Request.IsAuthenticated) {
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLConnStr"].ConnectionString);
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT Gruppi.Name FROM Ruoli INNER JOIN Gruppi ON Ruoli.GroupID = Gruppi.GroupID INNER JOIN Utenti ON Ruoli.UserID = Utenti.UserID AND Utenti.Username=@UserName", conn);
cmd.Parameters.AddWithValue("@UserName", User.Identity.Name);
SqlDataReader reader = cmd.ExecuteReader();
ArrayList rolelist = new ArrayList();
while (reader.Read()){
rolelist.Add(reader["Name"]);
}
// roleList.Add(reader("Name"))
string[] roleListArray = (string[])rolelist.ToArray(typeof(string));
HttpContext.Current.User = new GenericPrincipal(User.Identity, roleListArray);
reader.Close();
conn.Close();
}
}
我可以像您从我的 global.asax 文件而不是 login.aspx 页面中那样将用户数据存储到会话中吗?