使用表单身份验证获取当前用户ID(不是名称)?问题:我正在使用表单身份验证和我自己的自定义成员资格提供程序。据我所见,我可以通过以下方式获得当前的FormsIdentity:我可以获得当前会员资格用户这样做:varUserFromDb=System.Web.Security.Membership.GetUser();然后我可以通过这样做来获取用户ID:varMyUserId=UserFromDb.ProviderUserKey;我发现有趣的是,当我调用Membership.GetUser()时,它会在成员资格提供程序中调用此方法publicoverrideMembershipUserGetUser(stringusername,booluserIsOnline),它会在数据库中查找用户信息。所以我认为在.NET框架内部它就像GetUser(System.Web.HttpContext.Current.User.Identity.Name,whatever);它根据USERNAME从数据库中获取用户信息。我发现这令人不安,首先是因为当我必须查找整个用户只是为了获取用户ID时,这对性能不利。其次,令人不安的是我必须查找用户ID,因为这不是我所期望的。第三,它令人不安,因为用户名可以在程序运行期间更改,让用户必须注销并登录才能这样做是无稽之谈。现在,对我来说,这个设计听起来很垃圾。不过话又说回来,微软还把应用名、组名、用户名作为主键,这也没什么意义。所以我的问题在这里:有没有办法在不查找数据库的情况下获取用户ID?还是整个会员提供者的想法被设计打破了?万一它坏了:我看到FormsIdentity有一个名为userdata的字符串属性。如果是这样,我如何使用ASP.NET来保存用户ID?是的,可以在此处找到解决方法。UserId可以在Authcookie-TicketUserData中设置。publicclassUserData{publicstringFirstName{get;放;}publicUserData(){FirstName="Unknown";}}//结束类UserDatapublicvoidSignIn(stringuserName,boolcreatePersistentCookie){if(String.IsNullOrEmpty(userName))thrownewArgumentException("DerWertdarfnichtNULLoderleersein.","userName");用户数据userData=newUserData();SetAuthCookie(用户名,createPersistentCookie,userData);//FormsAuthentication.SetAuthCookie(用户名,createPersistentCookie);}publicvoidSetAuthCookie(stringuserName,boolcreatePersistentCookie,UserDatauserData){HttpCookiecookie=FormsAuthentication.GetAuthCookie(userName,createPersistentCookie);FormsAuthenticationTicketticket=FormsAuthentication.Decrypt(cookie.Value);FormsAuthenticationTicketnewTicket=newFormsAuthenticationTicket(ticket.Version,ticket.Name,ticket.IssueDate,ticket.Expiration,ticket.IsPersistent,userData.ToJSON(),ticket.CookiePath);字符串编码t=FormsAuthentication.Encrypt(newTicket);cookie.Value=encTicket;System.Web.HttpContext.Current.Response.Cookies.Add(cookie);}//EndSubSetAuthCookie另一种可能是使用UserId.ToString()As"name"以上是C#学习教程:使用formsauthentication获取当前用户ID(而不是name)?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
