【发布时间】:2012-06-23 04:40:24
【问题描述】:
我目前正在使用 ASP.NET MVC 3 开发一个站点,我正在使用 Nhibernate。我创建了一个自定义 MembershipProvider,如下所述。
我的问题是时间在 ValidateUser 方法中记录会话中的用户身份验证并在 GetUser 中检索它。
据我所知,您不能在 ValidateUser 中使用 Session,但使用 Cache 是不正确的,因为存储不是每个用户会话。
我该怎么做?
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;
}
}
【问题讨论】:
-
不要在 ValidateUser 方法中添加。如果 ValidateUser 返回 true,则在 web 应用程序中添加它。
-
但是在 GetUser(string username, bool userIsOnline) 方法中我需要返回一个 MembershipUser。
标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-membership