asp .net core app doesn't set response cookie in IE and EDGE but works well in firefox and chrome

蹲街弑〆低调 提交于 2021-02-19 01:37:10

问题


I have a login controller with a post action which redirects to home page after successful login. I am using following code for redirection, which works well in Chrome and Firefox. but doesn't redirect in IE and EDGE, and response cookie not set

private ActionResult RedirectToLocal(string returnUrl)
{
    if (Url.IsLocalUrl(returnUrl))
    {
        return Redirect(returnUrl);
    }
    else
    {
        return RedirectToRoute("default", new { controller = "", action = "" });
    }
}

My Login action

public IActionResult Login(string userName, string password)
{
   try
   {
       if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password))
                throw new InvalidOperationException("Username/Password can not be empty");

            var session = CreateSession(userName, password);
            var returnUrl = Request.Query["returnUrl"];
            return RedirectToLocal(returnUrl);
    }
    catch (Exception ex)
    {
        ModelState.AddModelError("Login", ex.Message);
    }

        return View();
    }

I am using my own session management for which I set session cookies like following

CookieOptions option = new CookieOptions();
option.Path = AppPath;
option.Domain = AppHost;             
httpContextAccessor.HttpContext.Response.Cookies.Append(AppSessionToken, "SomeSessionId", option);

回答1:


After searching a lot for exact answer, I found that Internet Explorer (all versions) doesn't allow you to specify a domain of localhost, a local IP address or machine name. When you do, Internet Explorer simply ignores the cookie. So I removed following line

option.Domain = AppHost;

from my codes and everything start working as expected on both IE and EDGE.




回答2:


Since you didn't post your route mapping from Startup.cs, I am not sure why it didn't work for you. Maybe you shouldn't override the controller and action parameter by passing new { controller = "", action = "" } into the RedirectToRoute() method?

Instead, have you tried just calling the method with the route name, like

return RedirectToRoute("default");

Or, you can use RedirectToAction()

if (Url.IsLocalUrl(returnUrl))
{
    return Redirect(returnUrl);
}

// action, controller and route values
return RedirectToAction("index", "home", new { area = "" });


来源:https://stackoverflow.com/questions/50692588/asp-net-core-app-doesnt-set-response-cookie-in-ie-and-edge-but-works-well-in-f

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!