gpt4 book ai didi

ASP.NET 自定义 RoleProvider - cookie 的使用

转载 作者:行者123 更新时间:2023-12-04 05:50:08 26 4
gpt4 key购买 nike

目前在登录时,我正在为用户插入一行到 AccessSession 表中,该表保存了用户具有哪些角色以及 ASP.NET_SessionId cookie 的详细信息。

我对 GetRolesForUser 方法的自定义实现是:

public override string[] GetRolesForUser(string username)
{
List<string> roles = new List<string>();
string[] rolesArray;
char[] splitter = { '|' };

string sessionId = HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value;
AccessSession sessionObject = AccessSession.Get(sessionId);

if (sessionObject != null)
{
rolesArray = sessionObject.Roles.Split(splitter);

foreach (string role in rolesArray)
{
if (!String.IsNullOrEmpty(role))
{
roles.Add(role);
}
}
}
return roles.ToArray();
}

我的问题是我使用这种方法有错吗?如果 cookie 被禁用,则不会有 HttpContext.Current.Request.Cookies["ASP.NET_SessionId"]。我的替代计划是在 Session 中插入一个 AccessSession 对象,但是当自定义 RoleProvider 尝试访问它时,这始终显示为空。

我可以使用 cacheRolesInCookie=true 但同样不会比上述方法更好,因为禁用 cookie 会破坏功能。

谢谢,
理查德

最佳答案

好吧,我最终通过从 FormsAuthenticationTicket 中获取角色来解决它,该角色已经包含我的所有角色。以下是代码示例:

public override string[] GetRolesForUser(string username)
{
List<string> roles = new List<string>();
string[] rolesArray = new string[] { };
char splitter = Advancedcheck.BLL.Common.Const.default_splitter;

if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;

rolesArray = ticket.UserData.Split(splitter);

HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, rolesArray);
}
}
}

if (rolesArray.Length > 0)
{
foreach (string role in rolesArray)
{
if (!String.IsNullOrEmpty(role))
{
roles.Add(role.ToLower());
}
}
}
return roles.ToArray();
}

关于ASP.NET 自定义 RoleProvider - cookie 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10170688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com