【问题标题】:Request.Cookies not set as expectedRequest.Cookies 未按预期设置
【发布时间】:2017-02-08 09:58:09
【问题描述】:

我正在用 ASP.NET/C# (ASPX) 重写一个 ASP 经典 (ASPC) 应用程序。变化之一 我发现是在使用 Request.Cookies 集合中的值设置查询时:

sSQL = "select..." & " where S = '" & Request.Cookies("K")("S") & "'"

在 ASPC 中设置了请求 cookie,并从数据库返回一条记录。

在 ASPX 中,请求 cookie 未设置,查询不返回任何记录。

原始逻辑从查询字符串中设置Response.Cookies中的值:

    if  Request.QueryString("K") <> "" then 
        Response.Cookies("K")("S") = Request.QueryString("S")
    end if

我发现 Request.Cookies 没有在原始 ASPC 代码的任何地方明确设置。

目前,我的解决方法是添加一条语句来设置请求 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。

【问题讨论】:

    标签: asp.net cookies


    【解决方案1】:

    在仔细查看该问题后,我发现该问题仅体现在多值 Cookie 上。看来我在传播多值 cookie 时遇到了问题。具体情况是 page1 向 page2 发送表单,然后 page2 完成一些工作并重定向回 page1。我发现 Cookie 没有在 page2 中初始化。

    简单 cookie 没有出现此问题。我通过将多值 cookie 更改为简单 cookie 解决了这个问题:

    Response.Cookies["Key"].Values["SubKey"]
    to 
    Response.Cookies["Key-SubKey"].Value
    

    在我的例子中,多值 cookie 的使用似乎很随意。 (有时很难说出为什么有人在继承代码时做了他们所做的事情)IMO 这种变化只是做同样事情的另一种方式,所以它是一种重构——甚至可能是简化。

    其他可能的解决方案可能通过重新编写代码来实现。我很好奇 ASPX 中多值 cookie 的基本假设,以了解为什么会丢失值。

    【讨论】:

      猜你喜欢
      • 2013-10-12
      • 2018-02-24
      • 2018-09-12
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多