用户为HttpContext请求/响应标题添加了值

时间:2014-01-03 20:56:16

标签: c# asp.net http-headers

我在向Page.Request&添加值时遇到一些问题Page.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

2 个答案:

答案 0 :(得分:0)

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

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

您的选择:

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

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

答案 1 :(得分:0)

这看起来像是一个Cookie的工作,而不是http标头。浏览器不会向您返回自定义标题,但会返回您的Cookie。