After login I keep some user info in Session[""]
vars.
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
try
{
var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
var user = User.Identity;
try
{
ApplicationDbContext context = new ApplicationDbContext();
var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
string userId = UserManager.FindByName(model.UserName)?.Id;
var s = UserManager.GetRoles(userId);
var u = db.UsersViews.First(x => x.Id == userId);
Session["UserFullName"] = u.LastName + " " + u.FirstName.Substring(0, 1) + ". " + u.MiddleName.Substring(0, 1) + ".";
Session["UserRole"] = u.RoleName;
return RedirectToAction("Index", "Home");
}
catch (Exception ex)
{
return View("Lockout");
}
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}
catch (Exception ex)
{
throw;
}
}
Later I use it like
@using Microsoft.AspNet.Identity
@if (Request.IsAuthenticated)
{
using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
{
@Html.AntiForgeryToken()
<div class="form-inline my-2 my-lg-0 " style="margin-left:2em; margin-right:0em;">
<label class="form-control-sm mr-sm-2">@Session["UserFullName"] (@Session["UserRole"]) </label>
<a href="javascript:document.getElementById('logoutForm').submit()" class="btn btn-outline-primary btn-sm my-2 my-sm-0">Выход</a>
</div>
}
}
else
{
<form class="navbar-right">
<ul class="navbar-nav mr-auto">
<li class="nav-item">
<a id="loginLink" href="@Url.Content("~/Account/Login")" class="nav-link"><span class="glyphicon glyphicon-log-in"></span> Вход</a>
</li>
</ul>
</form>
}
But once session gone there is no value to display.
So my question is how to keep updated session vars without increaseing session timeout?
Thank you!