我是MVC的新手,所以这个问题可能是微不足道的。 在了登录的动作,我执行以下操作:新手:MVC3身份验证/记住我
public ActionResult LogOn(UserModel userModel, string returnUrl)
{
ActionResult retvalue = null;
UserProfile user = MyDatabaseAccess.Instance.GetAuthenticatedUser(userModel.EmailAddress, userModel.Password);
if (user != null)
{
FormsAuthentication.SetAuthCookie(userModel.EmailAddress, userModel.RememberMe);
Session["LoggedOnUser"] = user;
if (Url.IsLocalUrl(returnUrl))
{
retvalue = Redirect(returnUrl);
}
else
{
retvalue = RedirectToAction("Home", "Home");
}
}
else
{
retvalue = RedirectToAction("LogOn", "Account");
}
return retvalue;
}
在这一点上我的会议有充分的用户配置对象,我用它throught的网站,到目前为止一切正确运转。
用户下次访问该网站时用户已经通过身份验证(rememberme设置为true),并且User.Identity.Name具有之前通过验证的用户的电子邮件地址,该地址是正确的。 问题是,我想以与在LogOn操作中一样的方式将UserProfile加载到会话中。 我想要一个地方,而不是每个[授权]行动。
有没有这样的方法?
这不是存储在会话中的信息是个好主意。原因是会话cookie比认证cookie脆弱得多。会议也有像你遇到的问题。另外请记住,一个会话可以随时消失。它可以过期,或工作进程可以回收,或者其他几个原因,但最终的结果是会话将会消失在你身上。 Plus会话更难以扩展到服务器场方法。在那里存储任何状态并不是一个好主意,如果你这样做,应该是短期的。 –