Как сохранить значение сеанса в asp.net mvc core 2.0 - PullRequest
0 голосов
/ 17 января 2019

Как использовать сессию в 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 ();

1 Ответ

0 голосов
/ 18 января 2019

Когда вы устанавливаете Session Key UserId следующим образом:

HttpContext.Session.SetString("UserId", username.Id);

Вы можете получить к нему доступ в другом контроллере следующим образом:

public IActionResult DoStuffWithUserId()
{
    string userid = HttpContext.Session.GetString("UserId");

    // do stuff with the userid now...

    return View();
}

Однако убедитесь, что файл кода вашего другого контроллера содержит ссылку на Microsoft.AspNetCore.Http с помощью

using Microsoft.AspNetCore.Http;

для получения доступа к методу расширения GetString().

Смотрите здесь для более сложного примера.

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