我在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核心上遇到了问题
答案 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