You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用request.Cookies无法获取全部Cookie的问题求助

问题

我负责的项目需要追踪两个购物车,已设置shopping_cart和sc_shopping_cart两个Cookie分别记录购物车内容。但在Razor页面中使用request.Cookies读取时,仅能获取shopping_cart,而浏览器中可查看到两个Cookie均已设置。

补充信息:

  • 可通过JavaScript正常读取和更新sc_shopping_cart
  • 相关截图:Visual Studio本地变量面板、Chrome开发者工具的Storage->Cookies面板

使用的C#代码如下:

public static Dictionary<int,int> GetScCartDictionary(HttpRequest request, HttpResponse response)
{
    string cookieValue = request.Cookies["sc_shopping_cart"] ?? "";

    try
    {
        var cart = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(cookieValue));
        Console.WriteLine("[CartHelper] cart=" + cookieValue + " -> " + cart);
        var dictionary = JsonSerializer.Deserialize<Dictionary<int, int>>(cart);
        if(dictionary != null)
        {
            return dictionary;
        }
    }
    catch (Exception)
    {

    }

    if(cookieValue.Length > 0)
    {
        // 无效Cookie,删除
        response.Cookies.Delete("sc_shopping_cart");
    }

    return new Dictionary<int, int>();
}
排查方向及解决方法
  1. 检查Cookie的路径(Path)和域(Domain)
    浏览器中查看两个Cookie的Path和Domain配置,确保sc_shopping_cart的Path与shopping_cart完全一致。如果前端设置Cookie时指定了子路径(比如/shop),而Razor页面所在路径不匹配,后端就无法读取该Cookie。统一两个Cookie的Path为项目根路径(/)即可。

  2. 验证Cookie的SameSite属性
    若sc_shopping_cart的SameSite属性设置与shopping_cart不同,可能导致后端无法读取。比如一个设为Strict,另一个设为Lax。将两者的SameSite属性统一为Lax(常规场景)或None(跨域场景,需配合Secure属性)。

  3. 移除异常捕获,排查读取环节
    当前代码捕获了所有异常但未输出信息,建议暂时注释掉try-catch块,或在catch中添加Console.WriteLine(ex.Message),确认是否是解码环节抛出异常导致逻辑走了删除分支。如果request.Cookies["sc_shopping_cart"]本身就取不到,那问题出在Cookie的传递而非解码。

  4. 清除浏览器缓存,重新测试
    浏览器可能缓存了旧的Cookie配置,清除对应站点的Cookie后,重新生成两个Cookie再测试,排除缓存干扰。

  5. 检查ASP.NET Core的Cookie策略
    若项目中配置了CookiePolicyOptions,比如限制了Cookie的传输规则,需确保sc_shopping_cart符合策略要求。比如策略要求Cookie必须是Secure,而sc_shopping_cart未设置Secure属性(仅HTTP环境下可能出现)。

内容的提问来源于stack exchange,提问作者David Slish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:52:12