存储信息以在不查询数据库的情况下检索它们
Store information to retrieve them without querying the database
目前我有一个问题需要解决以避免软件中出现重复代码。我希望在执行登录时,系统会存储一些信息,这样我就不必一直去查询数据库。例如,我需要存储来自两个 类:
的信息
用户
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; }
}
学校
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
一样存储和检索这些信息吗?
使用会话,登录后设置
Session["user"] = user;
Session["school"] = school;
然后随心所欲地使用它
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 分钟。
有许多不同的解决方案可满足您的要求:
缓存
如果您的应用程序 运行 在一台服务器上,您可以使用内存缓存(如 asp.net 缓存)。
如果不止一个,那么您可以使用分布式缓存,例如 Redis 或 Memcached。您也可以获得一些免费的在线服务器用于测试目的。如果您选择缓存,您还需要一个好的策略来使缓存失效,因为没有好的失效策略的缓存会对您的应用程序造成非常大的破坏。
没有 SQL 数据库
另一个解决方案是没有 SQL 比关系数据库快得多的数据库。
网络存储
如果您的数据不敏感,您可以考虑在浏览器的网络存储中为每个用户存储少量数据。
目前我有一个问题需要解决以避免软件中出现重复代码。我希望在执行登录时,系统会存储一些信息,这样我就不必一直去查询数据库。例如,我需要存储来自两个 类:
的信息用户
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; }
}
学校
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
一样存储和检索这些信息吗?
使用会话,登录后设置
Session["user"] = user;
Session["school"] = school;
然后随心所欲地使用它 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 分钟。
有许多不同的解决方案可满足您的要求:
缓存
如果您的应用程序 运行 在一台服务器上,您可以使用内存缓存(如 asp.net 缓存)。 如果不止一个,那么您可以使用分布式缓存,例如 Redis 或 Memcached。您也可以获得一些免费的在线服务器用于测试目的。如果您选择缓存,您还需要一个好的策略来使缓存失效,因为没有好的失效策略的缓存会对您的应用程序造成非常大的破坏。
没有 SQL 数据库
另一个解决方案是没有 SQL 比关系数据库快得多的数据库。
网络存储
如果您的数据不敏感,您可以考虑在浏览器的网络存储中为每个用户存储少量数据。