目前我有一个问题需要解决,以避免我的软件中出现重复的代码 . 我希望在执行登录时,系统会存储一些信息,这样我就不必一直在查询数据库中 . 我需要存储两个类的信息:
USER
public class User
{
public Guid Id { get; set; }
public String Name { get; set; }
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
}
SCHOOL
public class School
{
public Guid Id { get; set; }
public String Name { get; set; }
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
public int Code { get; set; }
}
我经常在我的软件中使用这两个中的信息,目前每次从数据库加载它们 . 所以我想知道在我登录时是否有办法存储信息,这样我就不必查询数据库了 . 我的登录代码:
if (user != null)
{
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName,
FormsAuthentication.Encrypt(new FormsAuthenticationTicket(login.Email.ToLower(), false, 60))));
//Store school and user information here.
return RedirectToAction("Dashboard", "Home", new { area = "" });
}
有没有办法存储这些信息并检索它们与 User.Identity.Name
相同?
3 回答
您的要求有许多不同的解决方案:
Caching
如果您的应用程序在一台服务器上运行,您可以在内存缓存(如asp.net缓存)中使用 . 如果不止一个,那么您可以使用像Redis或Memcached这样的分布式缓存 . 您也可以获得一些免费的在线服务器用于测试目的 . 如果选择缓存,则需要一个好的策略来使缓存失效,因为没有良好的失效策略的缓存对您的应用程序来说可能是非常具有破坏性的 .
No SQL databases
另一个解决方案是No SQL数据库,它比关系数据库快得多 .
Web storage
如果您的数据不敏感,您可以为每个用户在浏览器的Web存储中存储少量数据,但需要考虑一些因素 .
登录设置后使用会话
然后在任何你想要的地方使用How to use sessions in an ASP.NET MVC 4 application?
您可以使用
Session
对象https://docs.microsoft.com/en-us/dotnet/api/system.web.mvc.controller.session?view=aspnet-mvc-5.2
https://code.msdn.microsoft.com/How-to-create-and-access-447ada98
此对象允许您在多个控制器中使用用户的信息 . 它还允许您向其添加过期类型 . 默认情况下是30分钟 .