我知道之前已经提出过类似的问题,但我找不到能够专门处理ASP.NET MVC(以及控制器方面)的重复内容。设置/获取用户是否登录信息的最佳实践
我的问题如下:
在MVC模式,我的理解是,控制器应该处理使用的HttpContext,以确定谁登录,如果有的话。这是控制器可以将这些信息呈现给视图,以便视图本身不必执行这些查找。
有没有关于如何做的事实标准?
我目前的设置如下[简体]
我有一个BaseController
,其中我的所有其他控制器继承。
在BaseController
,我执行以下重写:
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(requestContext);
ViewData["IsUserLoggedIn"] = IsUserLoggedIn; // bool property checking HttpContext.User.Identity.IsAuthenticated;
ViewData["CurrentUser"] = CurrentUser; // Property returning logged in user, or null.
}
然后,自然地,在我的意见,我可以检查ViewData的值。
你怎么办?我想知道我的设置是否有问题,如果有,有什么问题?我对解决方案并不满意,主要是因为我对周期不太熟悉,而且我不确定自己的代码是否放在正确的位置。
我知道这里可能没有“一个答案绑定他们”,我接受的答案提供了最深入的见解。
有趣的方法。您的cookie方案如何与FormsAuthentication cookie相关联(当然,如果您使用表单身份验证)? – Terje 2010-01-09 19:28:09
我没有使用FormsAuthentication,但我确实使用了常规的FormsAuthenticationTicket和HttpCookie。 当用户尝试登录时,我的控制器首先会调用我的域名层以尝试登录该用户。如果成功,那么我的控制器将创建一个包含我的加密用户名的FormsAuthenticationTicket对象,将它放入一个HttpCookie中,并将该Cookie放入Response.Cookies集合中。 在过去,我还必须添加一些东西到系统中以跟踪用户实际登录的情况(即,您从票据载入用户,然后检查他们是否也已登录)。 – 2010-01-12 15:23:47
我一直在寻找见解,并且我得到了一些。谢谢。我会研究这种方法,并从我自己的经验中看到它与我目前使用的相比如何。跟踪用户是否登录;我用我的用户表中的最后一个活动标记来处理它,并在每次调用BaseController的Initialize时更新它。 – Terje 2010-01-15 12:42:27