我需要验证经过身份验证的用户是否拥有我网站的有效成员资格。例如,如果用户的会员资格有效,他们可以自由浏览网站的“仅限会员”区域,而如果他们的会员资格无效或过期,他们会自动重定向到网站的计费区域。他们只能查看某些受限页面。
我正在考虑通过将用户的会员资格到期日期存储在 FormsAuthentication cookie 中来解决此问题。我正在使用自定义 MembershipProvider 并且已经将用户 ID 存储在 cookie 中,所以这很容易做到。身份验证 cookie 设置为 24 小时后过期。然后我会使用 custom 检查他们的会员资格是否处于活动状态AuthorizeAttribute
,如下所示:
public class MembershipAuthorizeAttribute : AuthorizeAttribute
{
private readonly bool authorizeMembership;
public MembershipAuthorizeAttribute()
{
this.authorizeMembership = true;
}
public MembershipAuthorizeAttribute(bool authorizeMembership)
{
this.authorizeMembership = authorizeMembership;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (this.authorizeMembership)
{
// Code to validate the membership hasn't expired
}
return base.AuthorizeCore(httpContext);
}
}
然后我可以像这样装饰我的控制器:
[MembershipAuthorize]
public class ActiveMembersController : Controller
{
// Only users with an active membership can access this controller
}
[MembershipAuthorize(false)]
public class BillingController : Controller
{
// All members can access this controller
}
这是一种很好的方法,还是有一种更简洁/更可取的方法来验证用户的会员资格是否处于活动状态?我宁愿不必为了检索用户的会员资格到期日期或状态而不必在每个请求上都访问数据库,这就是我想将此值存储在 cookie 中的原因。另外,是否可以将此值存储在 FormsAuthentication cookie 中,还是应该将其存储在不同的 cookie 中?