asp.net – HttpContext.Current.User.Identity.Name始终是string.Empty

嗨,我使用自定义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,您不需要手动进行

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....