C# FormsAuthentication.SetAuthCookie()是否需要重定向?

C# FormsAuthentication.SetAuthCookie()是否需要重定向?,c#,asp.net,forms-authentication,C#,Asp.net,Forms Authentication,在检查用户的凭据并确认其良好后,我使用FormsAuthentication.SetAuthCookie(“用户名”,false)以验证用户身份 然后在母版页中,我使用Page.User.Identity.IsAuthenticated来确保我们处理的是登录用户而不是来宾 问题在于首先设置auth cookie。当我设置身份验证cookie时,紧接着我运行了一个方法,该方法使用Page.User.Identity.IsAuthenticated将欢迎消息从一般的“欢迎,来宾!”消息更改为更个人化

在检查用户的凭据并确认其良好后,我使用
FormsAuthentication.SetAuthCookie(“用户名”,false)
以验证用户身份

然后在母版页中,我使用
Page.User.Identity.IsAuthenticated
来确保我们处理的是登录用户而不是来宾

问题在于首先设置auth cookie。当我设置身份验证cookie时,紧接着我运行了一个方法,该方法使用
Page.User.Identity.IsAuthenticated
将欢迎消息从一般的“欢迎,来宾!”消息更改为更个人化的“欢迎,用户名!”消息。这在我转到另一个页面之前不起作用,所以我知道登录过程已经起作用了,但是在刷新或重定向发生之前,我似乎无法访问所需的信息


设置身份验证cookie后是否需要重定向用户,以便使用
Page.user.Identity.IsAuthenticated
更改消息?

我以前见过这种情况,因此我知道答案是肯定的。(如中所示,您确实需要重定向用户以正确使用
Page.user.Identity.IsAuthenticated

我认为原因是,
IsAuthenticated
评估当前请求,并且当当前请求首次传入时,它被记录为未经验证

您需要做的是应用所述方法中的任何逻辑,而不检查
是否已授权(假设为真)

现在我不知道你的方法的细节,建议如何重新考虑它来应对这个问题,但是你可以将“Do Stuff”部分拆分成一个单独的函数,然后你可以直接从你的登录函数调用它来绕过身份验证检查


编辑:要支持我的假设,您可以

有趣的是:

表单身份验证票证提供表单身份验证 有关浏览器下一个请求的信息


我想指出的是,实际上有一种方法可以解决这个问题(因为我从来没有在任何其他类似的问题中看到过这样的说法)。您可以检索cookie及其数据,其中User.Identity的信息来自该cookie,而无需重定向。问题是,cookie还没有发送到浏览器

它只是从响应中获取FormsAuthentication生成的cookie。Cookies对象:

HttpCookie EncryptedCookie = Response.Cookies.Get(FormsAuthentication.FormsCookieName);
FormsAuthenticationTicket DecryptedCookie;
try {
    DecryptedCookie = FormsAuthentication.Decrypt(EncryptedCookie.Value);
} catch (ArgumentException) {
    // Not a valid cookie
    return false;
}
// DecryptedCookie.Name: The Username
// DecryptedCookie.UserData: Any additional data, as a string. This isn't normally used
return !DecryptedCookie.Expired;

啊,看来确实如此,谢谢你的回答!我想我可以在用户进行身份验证后重定向用户,这样我就不必费心在第一时间写一篇文章来填充欢迎消息了。@SgtBeardy:是的,重定向听起来像是一个很好的解决方案,可以解决meThanks@Pluto你救了这一天!!!是你的评论“cookie还没有被发送到浏览器”提供了突破。