ASP.NET MVC 5-如何保持用户登录
本文关键字:何保持 用户 登录 NET MVC ASP | 更新日期: 2023-09-27 18:22:08
我正在创建一个人们可以注册和登录的网站。我使用的是带有实体框架的SQL Server数据库。
这是我在中登录的操作
[HttpPost]
public ActionResult LoggingIn(User user)
{
ModelState.Clear();
var result = MainLogic.LogIn(user);
if (result.MessegeID == 0)
{
RedirectToAction("Index");
}
else
ViewBag.LoginInfo = result.Msg;
return View("Index");
}
现在我希望登录的用户能够登录x次。我一直在尝试使用TempData[LogedAs]=user,每次用户切换视图时,我都会使用TempDataKeep(),直到用户注销。
我认为这不是一个好的做法,否则我怎么能留住用户?
登录成功时需要设置会话变量。然后检查会话变量是否已设置,如果未设置,则将其发送到登录页面。这可能会对你有所帮助https://codereview.stackexchange.com/questions/51331/simple-authentication-in-asp-net-mvc-5
这是一个非常基本的想法,希望这对你来说有意义。
我认为使用自己的身份验证系统不是一个好主意,因为你对此人员没有太多知识,我建议使用Identity来管理用户身份验证,在持久化用户登录时需要考虑两点:
- 设置Cookie的过期时间
在Startup
类的ConfigureAuth
方法中,设置cookie的过期时间:
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
ExpireTimeSpan = new System.TimeSpan(90, 0, 0, 0),
CookieHttpOnly = false,
SlidingExpiration = true,
});
}
- 在IIS中设置计算机密钥,详细信息请点击此处
使用会话和cookie。据我所知,如果你没有明确提及,会话超时是20分钟。Cookie的超时时间可能比会话更长。因此,我的最佳选择是在您的应用程序中使用cookie,并注意安全和最佳实践。
您还可以使用cookie来管理日志记录。创建cookie
HttpCookie cookie = new HttpCookie("Cookie");
初始化其值,您可以存储用户ID或已登录用户的任何唯一数据。
cookie.Value = "user data";
cookie.Expires = DateTime.Now.AddSeconds(10);//You can set expire in seconds, hours or days etc. as per your choice. Cookie will get expire as per the time you have set.
设置为响应以添加cookie。
this.ControllerContext.HttpContext.Response.Cookies.Add(cookie);
访问cookie检查cookie是否存在
if (Request.Cookies["Cookie"] != null) {
}else{
string temp = Request.Cookies["Cookie"].Value; // access the value of cookie
}