Когда и как использовать Session в .Net Core?
Я показываю информацию о пользователе и динамическое меню с компонентами на странице просмотра _Layout.
Каждый постбэк при чтении данных и попыткеметоды.Я также не использую авторизацию на основе ролей и политик, у меня есть собственные таблицы авторизации.Я использую атрибут авторизации.
С точки зрения производительности, следует ли мне хранить информацию, необходимую для авторизации и компонентов в сеансе?
При использовании сеанса я пытался настроить сеанс с помощьюстатический метод и повторный сеанс, если время ожидания сеанса.
Время ожидания файла cookie идентификации 1 час, время сеанса 20 минут.Когда страница была закрыта или сеанс закрыт, необходимо было создать сеанс или перенаправить на страницу входа.
- Стоит ли использовать сеанс?
- Если я собираюсьиспользовать сеанс, какими должны быть идентификационный файл cookie и время ожидания сеанса?
- Если сеанс закрыт, я должен перенаправить на страницу входа или заново создать сеанс?
перенаправить на метод входа в систему
public class CurrentUser
{
public static User GetUserInfo()
{
var result = new User();
if (AppHttpContext.Current.Session.GetStringToObject<User>("UserInfo") == null && AppHttpContext.Current.User.Identity.IsAuthenticated)
{
AppHttpContext.Current.Response.Redirect("/User/LoginUser");
}
else
result = AppHttpContext.Current.Session.GetStringToObject<User>("UserInfo");
return result;
}
}
для воссоздания метода сеанса
public class CurrentUser
{
protected readonly IUnitOfWork UnitOfWork;
public CurrentUser(IUnitOfWork unitOfWork)
{
UnitOfWork = unitOfWork;
}
public static UserInfoModel GetUserInfo()
{
if (AppHttpContext.Current.Session.GetStringToObject<UserInfoModel>("UserInfo") == null && AppHttpContext.Current.User.Identity.IsAuthenticated)
{
CurrentUser currentUser = new CurrentUser(new UnitOfWork.UnitOfWork.UnitOfWork(new CyCoreContext()));
currentUser.SetUserInfo(Convert.ToInt32(AppHttpContext.Current.User.Identity.Name));
}
return AppHttpContext.Current.Session.GetStringToObject<UserInfoModel>("UserInfo");
}
public void SetUserInfo(int userId)
{
User user = UnitOfWork.Users.GetById(userId);
if (user != null)
{
UserInfoModel userInfoModel = new UserInfoModel()
{
User = user,
Roles = UnitOfWork.UserRoles.GetAll().Where(u => u.UserId == user.Id).Select(s => s.RoleId).ToList(),
UserModulRights = GetUserModulRights(user.Id.ToString())
};
foreach (var item in CurrentUser.GetUserInfo().UserModulRights.ToList())
{
if (item.InsertRight == true) userInfoModel.UserRoles.Add("Insert" + item.ModulName);
if (item.UpdateRight == true) userInfoModel.UserRoles.Add("Update" + item.ModulName);
if (item.DeleteRight == true) userInfoModel.UserRoles.Add("Delete" + item.ModulName);
if (item.ViewRight == true) userInfoModel.UserRoles.Add("View" + item.ModulName);
if (item.InsertFileRight == true) userInfoModel.UserRoles.Add("InsertFile" + item.ModulName);
if (item.DeleteFileRight == true) userInfoModel.UserRoles.Add("DeleteFile" + item.ModulName);
if (item.ViewFileRight == true) userInfoModel.UserRoles.Add("ViewFile" + item.ModulName);
}
AppHttpContext.Current.Session.SetObjectToString("UserInfo", userInfoModel);
}
}
}
Мне нужны ваши хорошие идеи