【问题标题】:Can not read all cookies of a request in asp.net core无法读取asp.net核心中请求的所有cookie
【发布时间】:2019-12-17 08:20:58
【问题描述】:

我在 asp.net core mvc 中编码。我的问题是通过 javascript 设置了一些 cookie,但是在 asp.net core mvc 控制器中,我无法检索我之前设置的特定键的值。然后我尝试计算 cookie 列表中存在的键数。

string strCart = Request.Cookies.Count().ToString();

输出是 2 尽管它必须是 3 并且我想得到的密钥在 Request.Cookies 中丢失了

编辑: 这是js代码

function SetCookie(cname, cvalue, exdays,cpath) 
{ 
  let d = new Date(); 
  d.setTime(d.getTime() + (exdays*24*60*60*1000));
  let expires = "expires="+ d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/" + cpath;
} 

它直接在 php 上工作,但在 asp.net core 上出现问题

【问题讨论】:

  • 你能显示你在javascript中设置cookies的代码吗?另外,您是否通过在浏览器中检查 cookie 来确认它们存在?
  • 请在问题中编辑附加代码。这次它为你做到了。
  • @LemuelBotha 当我检查它时它都存在于浏览器中。
  • @Christopher 我已编辑。
  • 输入/您如何称呼它可能很重要。毕竟,如果 exdays 为 0,则到期日期将为“现在”。这意味着它在发送之前被收集。

标签: c# cookies asp.net-core-mvc asp.net-core-3.0 httpcookie


【解决方案1】:

在 ASP.Net 中,您不需要做很多级别的事情。像创建 cookie 这样的事情就在你通常不做的水平上。 ASP.Net has a lot of Automagics 使这里的编程更容易。通过 cookie 和链接值存储和检索会话 ID 的自动魔法就是其中之一。该代码可能很容易吞下客户端创建的 cookie,而服务器不知道它。它甚至可以是一种主动的安全措施——允许客户端请求设置任何随机值已经一次又一次地证明是麻烦的。

根据一条评论,这是您所期望的:cart=[{"id":1,"qty":6}]。所以我要猜测一个网上商店。现在像购物车这样的数据真的不属于客户端。攻击者很容易通过向您抛出意外值来破坏您的代码。永远不要相信用户输入。对于任何网络,都应该消除这种不信任。

我认为当他们允许您在登录之前使用购物车时,他们所做的就是为您提供一个会话 ID,而不管登录状态如何。通常您只有在登录后才能获得 SID。但是网上商店倾向于给没有随请求一起发送的每个人。它是每个人的 SID。如果他们稍后登录或创建帐户,只需将会话链接到帐户,在服务器端复制购物车或类似的东西。

【讨论】:

  • 感谢您的建议,我已经找到了解决方案。
【解决方案2】:

感谢您对我的支持,现在我发现了我的代码的问题。问题是在设置 cookie 值时我忘记转义字符串的字符。在 php 或 js 中是可以接受的,但 c# 是强类型语言,而 c# 使用双引号来确定字符串,因此 json 字符串具有导致冲突的字符。之后,结果就是缺少特定的cookie

【讨论】:

    猜你喜欢
    • 2017-07-27
    • 2020-03-23
    • 2020-04-20
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 2017-03-22
    相关资源
    最近更新 更多