我正在ASP.NET / C#(ASPX)中重写ASP经典(ASPC)应用程序。其中一个变化 我发现是在使用Request.Cookies集合中的值设置查询:
sSQL = "select..." & " where S = '" & Request.Cookies("K")("S") & "'"
在ASPC中,设置了请求cookie,并从数据库返回一条记录。
在ASPX中,未设置Request cookie,查询不返回任何记录。
原始逻辑从查询字符串中设置Response.Cookies中的值:
if Request.QueryString("K") <> "" then
Response.Cookies("K")("S") = Request.QueryString("S")
end if
我发现原始ASPC代码中的任何地方都没有显式设置Request.Cookies。
目前,我的修复是添加一个语句来设置Request Cookie:
if Request.QueryString("K") <> "" then
Response.Cookies("K")("S") = Request.QueryString("S")
Request.Cookies("K")("S") = Request.QueryString("S") ' adding this fixes the issue, but its a kludge
end if
但是,我不明白为什么需要这样做。
似乎Request.Cookies和Response.Cookies的值有所不同 由ASPC和ASPX维护。有没有人见过这个?这是一个众所周知的 ASPC和ASPX的差异?
这种情况发生在IIS7,IE11(和firefox)中,使用的是C#4.5,VS2015。
答案 0 :(得分:0)
在仔细查看问题之后,我发现问题只出现在一个多值Cookie中。看来我遇到了传播多值cookie的问题。具体的情况是page1做了一个form-post到page2然后page2做了一些工作,并重定向回page1。我发现第2页没有初始化Cookies。
简单的Cookie没有出现问题。我通过将多值cookie更改为简单的cookie来解决这个问题:
Response.Cookies["Key"].Values["SubKey"]
to
Response.Cookies["Key-SubKey"].Value
就我而言,使用多值cookie似乎很随意。 (有时很难说出为什么有人做了你继承代码时所做的事情)IMO这种改变只是做同样事情的另一种方式,所以它的重构 - 甚至可能是简化。
通过重新编写代码,可能有其他可能的解决方案。我很好奇ASPX中多值cookie的基本假设,以了解价值丢失的原因。