gpt4 book ai didi

ASP.NET MVC 3 成员(member)提供程序

转载 作者:行者123 更新时间:2023-12-01 19:15:01 24 4
gpt4 key购买 nike

我目前正在使用 ASP.NET MVC 3 开发一个网站,我正在使用 Nhibernate。我创建了一个自定义 MembershipProvider,如下所述。

我的问题是在 ValidateUser 方法中记录 session 中的用户身份验证并在 GetUser 中检索它的时间。

据我所知,您不能在 ValidateUser 中使用 Session,但使用缓存是不正确的,因为存储不是针对每个用户 session 的。

我该怎么办?

class MyMembershipProvider : MembershipProvider
{
public override MembershipUser GetUser(string username, bool userIsOnline)
{
var membershipUser = MyMembershipUser)HttpContext.Current.Cache.Get(username);

// Is not possible
// var membershipUser = (MyMembershipUser) HttpContext.Current.Session[username];

return membershipUser;
}

public override bool ValidateUser(string username, string password)
{
var usuario = UsuarioRepository.GetUsuarioAuthentication(username, password);

if (usuario != null)
{
HttpContext.Current.Cache.Add(username, new MyMembershipUser(usuario.Id, usuario.Email), null,
Cache.NoAbsoluteExpiration, FormsAuthentication.Timeout,
CacheItemPriority.Default, null);

// Is not possible
// HttpContext.Current.Session.Add(username, new MyMembershipUser(usuario.Id, usuario.Email));

return true;
}

return false;
}

}

最佳答案

当您使用带有表单例份验证的 ASP.NET 成员身份时,根本不涉及 session 。

用户成功通过身份验证后,只需调用

FormsAuthentication.SetAuthCookie() 

系统会自动为您创建一个身份验证 cookie。不要在 ValidateUser() 中调用此函数,而是从调用 ValidateUser() 的客户端代码中调用此函数。

身份验证 cookie 完全独立于 session cookie。

引用Forms Authentication在 MSDN 上了解更多信息。

如果您想缓存经过身份验证的用户的用户详细信息,同样应在调用 Membership.ValidateUser() 的客户端代码中完成此操作,而不是在成员资格提供程序本身中完成。 成员资格提供程序 GetUser() 和 ValidateUser() 应该按照其名称所示执行操作,并且不会产生任何其他副作用。

关于ASP.NET MVC 3 成员(member)提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com