Когда и как использовать сессию в .Net Core? - PullRequest
0 голосов
/ 25 октября 2018

Когда и как использовать Session в .Net Core?

Я показываю информацию о пользователе и динамическое меню с компонентами на странице просмотра _Layout.

Каждый постбэк при чтении данных и попыткеметоды.Я также не использую авторизацию на основе ролей и политик, у меня есть собственные таблицы авторизации.Я использую атрибут авторизации.

С точки зрения производительности, следует ли мне хранить информацию, необходимую для авторизации и компонентов в сеансе?

При использовании сеанса я пытался настроить сеанс с помощьюстатический метод и повторный сеанс, если время ожидания сеанса.

Время ожидания файла cookie идентификации 1 час, время сеанса 20 минут.Когда страница была закрыта или сеанс закрыт, необходимо было создать сеанс или перенаправить на страницу входа.

  1. Стоит ли использовать сеанс?
  2. Если я собираюсьиспользовать сеанс, какими должны быть идентификационный файл cookie и время ожидания сеанса?
  3. Если сеанс закрыт, я должен перенаправить на страницу входа или заново создать сеанс?

перенаправить на метод входа в систему

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);
            }
        }
}

Мне нужны ваши хорошие идеи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...