Сессии не сохраняются при создании с .Net Core - PullRequest
0 голосов
/ 22 сентября 2019

Я новичок в .Net и создаю веб-приложение, в котором я хочу создать сеанс, когда пользователь входит в систему или регистрируется и подтверждает регистрацию.Для входа в систему у меня есть страница бритвы: Войдите в систему, где он просто запрашивает у пользователя имя пользователя и пароль, которые должны быть на моем сервере sql и проверены.Как только он проверит, что действительный флаг пользователя правильный, я хочу создать сеанс и отправить пользователя в Index на данный момент.Затем в Index я хочу посмотреть, был ли создан сеанс, и хочу прочитать значение в сеансе и отобразить его в представлении Index, чтобы подтвердить, что информация о пользователе была захвачена.
Мой файл Login.cs выглядит такэто:

 public ActionResult OnPost(string UserName, string Password)
        {

            if (!ModelState.IsValid)
            {
                return Page();
            }

            if(accountService.ValidateUserLogin(UserName, Password) == 1)
            {

                string Email = accountService.UsernameGetEmail(UserName);
                HttpContext.Session.SetString(Email, TempData["email"].ToString());
                return RedirectToPage("/Index");
            }
            else
            {
                //report error to user
                return Page();
            }
        }

Здесь я пытаюсь получить информацию о сеансе на моей странице Index.cs:

public void OnGet()
        {
            if (HttpContext.Session.Id != null)
            {
                SessionEmail = HttpContext.Session.GetString("Email");
                ViewData["SessionEmail"] = SessionEmail;
            }
        }

Это фрагмент HTML, где я пытаюсь отобразить этот SessionEmailна представление, но при инициализации SessionEmail внутри файла index.cs оно становится пустым.

<div>
    @{ 
        if( ViewData["SessionEmail"] != null)
        {
        <p> Hello! @ViewData["SessionEmail"].ToString() </p>
        }
    }
</div>

Надеюсь, вы можете указать на мои ошибки здесь и на то, как я пытаюсь настроить сеанс.После того, как я смогу установить сеанс, я собираюсь изменить панель навигации моего макета так, чтобы она изменилась, если пользователь вошел в систему или нет, может быть, если вы сможете указать, как я могу сделать это с сеансами, которые были бы хороши,возможно: httpcontext.session.IsAvailable?Кроме того, у меня есть addSession и useSession при запуске.

1 Ответ

2 голосов
/ 22 сентября 2019

Попробуйте:

HttpContext.Session.SetString("Email", Email);

Причина в том, что вы получаете адрес электронной почты пользователя здесь:

string Email = accountService.UsernameGetEmail(UserName);

Затем вы пытаетесь сохранить его в сеансе, используяметод расширения SetString.Этот метод принимает key в качестве первого аргумента и value в качестве второго.

Позже вы вызываете метод расширения GetString с key of "Email ":

SessionEmail = HttpContext.Session.GetString("Email");

Так что вам нужно установить value с тем же key:

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