【问题标题】:Space in cookie name causes api to return 401cookie 名称中的空格导致 api 返回 401
【发布时间】:2014-09-17 17:18:55
【问题描述】:

我们刚刚开始将授权属性添加到我们的 api 端点。在我们将这些更改放入我们的测试环境之前,一切都运行良好。当任何 cookie 的名称中有空格时,它会导致 api 回退 401。我想知道是否有人遇到同样的问题,或者是否有某种方法可以修复 cookie 或 api?

【问题讨论】:

  • 我认为 cookie 名称中不允许有空格 stackoverflow.com/questions/1969232/…
  • 他们不是,但我无法控制我们的客户创建不良 cookie。我正在寻找一种方法来处理这个问题。我正在考虑运行检查并删除任何不良 cookie。但我希望有更好的方法。我讨厌删除任何东西的想法,尤其是当我不知道它是什么的时候。

标签: asp.net cookies http-headers


【解决方案1】:

它返回 401 的原因是 get cookies 方法返回 null。

 HttpRequestHeaders.GetCookies("COOKIENAME");

所以即使那个 cookie 存在。如果任何 cookie 的名称中有空格(或无效字符),它将导致该方法返回 null。如果您在过滤器中使用它(在我们的例子中是 MembershipAuthorization),那么您将不得不以不同的方式访问 cookie。我对此并不满意,但我在分号上使用了字符串拆分。不能保证,因为如果该值未经过 urlencoded,那么可能会有一个分号将其丢弃。

 var cookiesString = actionContext.Request.Headers.GetValues("Cookie").First();            
        try
        {
            foreach (var cook in cookiesString.Split(';'))
            {
                if (cook.Split('=').First().ToUpper().Trim() == "COOKIENAME")
                {
                    currentUser = cook.Split('=')[1];
                }
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2014-06-08
    • 2016-06-29
    • 2017-04-04
    • 1970-01-01
    相关资源
    最近更新 更多