我想开发一个MVC 5项目,它可以在调用网站上提供样式,标题,菜单和页脚等相同的外观和感觉。
因此,例如,调用网站将发布标题,菜单和页脚,或用于数据库查找的加密密钥,因此MVC项目可以采用此方法并创建一个看起来像调用网站的视图。
这很好用,我可以使用TempData
和TempData.Keep()
在所有请求中保留页面样式。
但是,现在我想允许MVC站点上的用户登录/验证,以便他们可以看到一些特权页面。
我遇到的问题是我可以让用户登录,并且仍然使用TempData
保留样式。问题出现在用户会话到期时,他们点击,我丢失了样式信息。
目前我有这个控制器和动作来处理登录;
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(User user)
{
TempData["User"] = null;
if (ModelState.IsValid)
{
if (user.IsValid(user.Email, user.Password, Request.UserHostAddress))
{
string userData = user.Email;
HttpCookie authCookie = FormsAuthentication.GetAuthCookie(user.Email, false);
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value);
FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, userData);
authCookie.Value = FormsAuthentication.Encrypt(newTicket);
Response.Cookies.Add(authCookie);
TempData.Keep("CmsContent");
return RedirectToAction("Index", "ManageAccount");
}
else
{
TempData["User"] = user;
TempData.Keep("CmsContent");
return RedirectToAction("Index", "Home");
}
}
else
{
user.Message = "Invalid email/password";
TempData["User"] = user;
TempData.Keep("CmsContent");
return RedirectToAction("Index", "Home");
}
}
目前使用TempData.Keep("CmsContent")
持久保存样式信息,但当会话过期时,它将丢失。
我如何才能最好地处理此类问题。