无法读取asp.net核心中的所有请求Cookie

时间:2019-12-17 08:20:58

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

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

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

尽管必须为3,但输出仍为2,并且我想获取的键在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核心上遇到了问题

2 个答案:

答案 0 :(得分:0)

在ASP.Net中,您不需要做很多级别的工作。像创建cookie这样的东西正好在您通常不做的级别上。 ASP.Net has a lot of Automagics使此处的编程更加容易。其中包括通过cookie和Link值存储和检索会话ID的自动装置。该代码可能很容易吞没在客户端创建的cookie,而服务器却不知道。它甚至可能是一种主动的安全措施-允许“客户请求”设置任何随机值,一次又一次地证明是麻烦的。

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

我认为,当他们允许您在登录之前使用购物车时,他们所做的就是为您提供一个会话ID,而无论登录状态如何。通常,只有登录后才能获得SID。但是,在线商店往往会给那些没有随请求一起发送的人。每个人都可以使用SID。如果他们以后再登录或创建帐户,则只需将会话链接到该帐户,在服务器端复制购物车或类似的操作即可。

答案 1 :(得分:0)

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