Как использовать сессию в MVC Core 2.0, как использовать в MVC 5 и веб-формах, например. "Session [" bla Bla "]" и как я использую userId, сохраненный в сессии в других контроллерах в проекте.
Вот мой логин:
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
// string userId = "";
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var username = await _userManager.FindByEmailAsync(model.Email);
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
var result = await _signInManager.PasswordSignInAsync(username.UserName, model.Password, false, false);
if (result.Succeeded)
{
_httpContext.HttpContext.Session.SetString("UserId",username.Id);
_logger.LogInformation("User logged in.");
return RedirectToLocal(returnUrl);
//return RedirectToAction("Index");
}
if (result.RequiresTwoFactor)
{
return RedirectToAction(nameof(LoginWith2fa), new { returnUrl, model.RememberMe });
}
if (result.IsLockedOut)
{
_logger.LogWarning("User account locked out.");
return RedirectToAction(nameof(Lockout));
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return View(model);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
В разделе автозагрузки
В ConfigureServices метод
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
// Set a short timeout for easy testing.
options.IdleTimeout = TimeSpan.FromSeconds(10);
options.Cookie.HttpOnly = true;
options.Cookie.Name = "FSession";
});
и способ настройки
app.UseSession ();