【问题标题】:User Added Value to HttpContext Request/Response Header being removed已删除 HttpContext 请求/响应标头的用户附加值
【发布时间】:2014-01-03 20:56:16
【问题描述】:

我在向 Page.RequestPage.Response 标头添加值时遇到一些问题,并且通过重定向使键和值保持/持久。

我有一个枚举跟踪代码,我想将它放在标题中,以跟踪用户在结帐之前如何浏览我的网站。

我正在使用此代码将标头添加到响应和请求上下文中。

var RequestSessionVariable = context.Request.Headers["SessionTrackingCode"];

if (RequestSessionVariable == null)
{
    context.Response.AddHeader("SessionTrackingCode", ((int)tracker).ToString());
    context.Request.Headers.Add("SessionTrackingCode", ((int)tracker).ToString());
}
else
{
    if(!RequestSessionVariable.Contains(((int)tracker).ToString()))
    {
        RequestSessionVariable += ("," + ((int)tracker).ToString());
        context.Request.Headers["SessionTrackingCode"] = RequestSessionVariable;
        context.Response.Headers["SessionTrackingCode"] = RequestSessionVariable;
    }
}

网站内必要控件Page_Load中发生的方法调用:

trackingcodes.AddPageTrackingCode(TrackingCode.TrackingCodes.ShoppingCart, this.Context);

标题SessionTrackingCode 是他们的,但在Response.Redirect("~/value.aspx") 之后RequestSessionVariable 始终为空。重定向上是否会发生某些事情会清除我添加的标头?或者我在添加标题键和值时做错了什么?

this 等于:

public partial class Cart : System.Web.UI.UserControl

【问题讨论】:

    标签: c# asp.net http-headers


    【解决方案1】:

    客户端在每次请求时发送标头,因此任何重定向都需要客户端再次发送标头。

    除非您使用一些特殊的客户端(不是浏览器),否则任何特殊的标头在请求期间基本上都会被忽略/丢失。浏览器只会在请求中发送已知标头(cookies、身份验证、引用者),并在响应中对其他已知标头集(setCookies)进行操作。您正在使用浏览器不知道的自定义标头,因此浏览器不会从响应中读取,也不会在请求中发送它。

    您的选择:

    • 改用 cookie 进行跟踪(与其他所有人一样)
    • 使用 AJAX 请求发送/接收自定义标头(可能不是您想要的,因为 url 看起来像常规 GET/POST 的)
    • 构建将关注您的标题的自定义客户端(纯理论,除非您构建某种销售终端,否则没有人会安装您的客户端来访问您的网站)

    注意:在页面代码中为请求添加标头没有多大意义,因为请求不会发送到任何地方(它来自浏览器)。

    【讨论】:

    • 谢谢,我想我需要使用 Cookie,但我尽量避免使用它,因为它们不会一直存在。
    【解决方案2】:

    这看起来像是 cookie 的工作,而不是 http 标头。浏览器不会将您的自定义标头返回给您,但会返回您的 cookie。

    【讨论】:

      猜你喜欢
      • 2021-04-08
      • 2016-05-06
      • 2015-01-08
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多