代码之家  ›  专栏  ›  技术社区  ›  yogihosting

是否有任何方法读取由ASP.NET核心控制器中的javascript代码创建的cookie?

  •  0
  • yogihosting  · 技术社区  · 6 年前

    我想问一下,是否有任何方法可以读取由控制器中的javascript代码创建的cookie?

    我的应用程序位于ASP.NET核心。

    在我看来,我是这样通过JS创建cookie的:

    <script type="text/javascript">
      document.cookie = "username=John Doe";
    </script>
    

    现在,在控制器的操作方法中,我尝试读取cookie,但在那里没有找到任何cookie:

    public IActionResult Index()
    {
        var boh = Request.Cookies["username"];
        return View();
    }
    

    boh的值为空,表示不使用cookie。

    我挖了更深一点,检查了“网络”区域,发现cookie没有添加到 响应 . 见下图:

    enter image description here

    如果我可以将cookie添加到响应中,那么我认为它在控制器中是可以访问的,但是如何访问呢??

    有什么解决办法吗????

    谢谢和问候

    2 回复  |  直到 6 年前
        1
  •  1
  •   yogihosting    6 年前

    我发现你需要按照某位专家的指示对cookie值进行编码。所以我通过编码更正了它:

    $(function () {
      var cookieValue = encodeURIComponent("John Doe");
      document.cookie = "username=" + cookieValue;
    });
    
        2
  •  0
  •   Edward    6 年前

    检查完饼干后 HttpContext.Request.Headers ,您设置的cookie document.cookie = "username=John Doe"; 存储在 HttpContext.Request.Headers["Cookie"] .

    尝试下面的代码来检索cookies。

    StringValues values;
    HttpContext.Request.Headers.TryGetValue("Cookie", out values);
    var cookies = values.ToString().Split(';').ToList();
    var result = cookies.Select(c => new { Key = c.Split('=')[0].Trim(), Value = c.Split('=')[1].Trim() }).ToList();
    var username = result.Where(r => r.Key == "username").FirstOrDefault();