当前,我有一个需要解决的问题,以避免软件中重复代码。我希望在执行登录时,系统会存储一些信息,这样我就不必一直花费时间在查询数据库中。例如,我需要存储两个类的信息:
用户
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
相同的方式检索它们?
答案 0 :(得分:1)
有多种解决方案可满足您的要求:
缓存
如果您的应用程序在一台服务器上运行,则可以在内存缓存(如asp.net缓存)中使用。 如果不止一个,则可以使用分布式缓存,例如Redis或Memcached。您也可以出于测试目的获得一些免费的在线服务器。如果选择缓存,则还需要一种使缓存无效的好策略,因为没有好的无效策略的缓存可能会对您的应用程序造成很大的破坏。
没有SQL数据库
另一个解决方案是没有SQL数据库,它比关系数据库快得多。
网络存储
如果您的数据不敏感,可以出于一些考虑为每个用户将少量数据存储在浏览器的Web存储中。
答案 1 :(得分:0)
设置登录后使用会话
Session["user"] = user;
Session["school"] = school;
,然后在任何需要的地方使用 How to use sessions in an ASP.NET MVC 4 application?
答案 2 :(得分:0)
您可以使用from django.db.models.signals import post_delete
@receiver(post_delete, sender=Gedcom, dispatch_uid='gedcom_s3_delete')
def s3_delete(sender, instance, using, **kwargs):
if settings.enable_s3:
try:
s3 = boto3.resource('s3')
file = s3.Object(settings.s3_bucket, instance.uuid)
file.delete()
except:
print("Unable to delete from S3")
对象
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分钟。