以编程方式刷新/更新HttpContext.User

时间:2009-03-02 20:19:32

标签: asp.net forms-authentication httpcontext

我正在使用FormsAuthentication用于具有显示当前登录用户的主页的ASP.NET站点,Page.User.Identity.Name。

他们可以在他们的设置中更改用户名,当这样做时,我会为他们更新他们的cookie,这样他们就不会用回发签名/重新登录。

FormsAuthentication.SignOut();
FormsAuthentication.SetAuthCookie(username, false);

我可能非常挑剔,但在他们更改用户名后,母版页仍会显示其原始用户名,直到他们重新加载或加载其他页面为止。

有没有办法以编程方式更新当前的Page.User,以便在同一回发期间显示他们的新用户名?

2 个答案:

答案 0 :(得分:6)

虽然MasterMax的建议是我要做的,但您实际上可以通过Page.User更新HttpContext.Current.User

如果您知道用户的角色(或者您没有使用基于角色的授权),则可以利用System.Security.Principal.GenericPrincipal类:

string newUsername = "New Username";
string[] roles = new string[] {"Role1", "Role2"};

HttpContext.Current.User = 
   new GenericPrincipal(new GenericIdentity(newUserName), roles);

答案 1 :(得分:1)

您可以创建母版页类的实例,并将您为用户名设置的属性设置为public,以便您可以在FormsAuthentication代码之后立即设置该属性。