嗨,我使用自定义MembershipProvider。
我想知道应用场景下的当前用户名,但是当我尝试访问HttpContext.Current.User.Identity.Name时,它总是返回string.Empty。
if (Membership.ValidateUser(tbUsername.Text,tbPassword.Text)) { FormsAuthentication.SetAuthCookie(tbUsername.Text,true); bool x = User.Identity.IsAuthenticated; //true string y = User.Identity.Name; //"" FormsAuthentication.RedirectFromLoginPage(tbUsername.Text,cbRememberMe.Checked); }
我缺少什么?
解决方法
FormsAuthentication.SetAuthCookie(tbUsername.Text,true); bool x = User.Identity.IsAuthenticated; //true string y = User.Identity.Name; //""
您所遇到的问题是,您只需设置身份验证cookie,在发出新请求之前,不会发生在表单身份验证模块中创建的IPrincipal,因此HttpContext.User处于异常状态。一旦重定向发生,那么因为它是一个来自浏览器的新请求,所以在您的页面到达之前,cookie将被读取,并创建正确的用户对象。
Cookie只有在请求完成后才能在浏览器中设置。
除此之外,RedirectFromLoginPage还会创建一个表单验证cookie,您不需要手动进行
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。