管理应用程序洞察Cookie

时间:2015-07-07 22:48:56

标签: c# asp.net azure-application-insights

我想知道应用程序见解如何与Cookie一起使用,因为我想了解用户和会话跟踪,所以我一直在研究和...

以下是该理论的简要介绍:

  1.   

    每当Application Insights SDK获得一个没有应用程序洞察用户跟踪cookie的请求(由Application Insights JS代码段设置)时,它将设置此cookie并启动一个新会话。   (来自apmtips

  2. 2

      

    UserTelemetryInitializer 更新所有遥测项目的用户上下文的 ID AcquisitionDate 属性,其中包含从 ai_user Cookie由用户浏览器中运行的Application Insights JavaScript检测代码生成。

         

    SessionTelemetryInitializer 为所有遥测项目更新会话上下文的 ID 属性,其值从 ai_session 中提取由用户浏览器中运行的ApplicationInsights JavaScript检测代码生成的cookie。   (来自azure documentation (Configuring the Application Insights SKD with ApplicationInsights.config)

    所以有两个Cookie: ai_session ai_user

    以下是我的问题:

    1. 他们什么时候初始化?
    2. 这是做什么的?
    3. 我该如何停止使用它们?
    4. 如果我想保留它们,我怎么能改变它们的到期时间?
    5. 尝试删除它们我使用ASP.NET Web应用程序使用Web Api的默认模板创建了一个项目,其中包括MVC和Web Api。

      进行研究我发现this approach禁用它们但我没有任何WebSessionTrackingTelemetryModule。所以我注释掉了“UserTelemetryInitializer”和“SessionTelemetryInitializer”,这就是我所拥有的:

      <TelemetryInitializers>
      
        <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.SyntheticTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />
        <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.ClientIpHeaderTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />
        <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.UserAgentTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />
        <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.OperationNameTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />
        <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.OperationIdTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />
      
      <!--<Add Type="Microsoft.ApplicationInsights.Extensibility.Web.UserTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />-->
      <!--<Add Type="Microsoft.ApplicationInsights.Extensibility.Web.SessionTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />-->
      
       <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.AzureRoleEnvironmentTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />
       <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.DomainNameRoleInstanceTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />
       <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.BuildInfoConfigComponentVersionTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />
       <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.DeviceTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />
      
      
      </TelemetryInitializers>
      

      并且:

      <TelemetryModules>
      
      <Add Type="Microsoft.ApplicationInsights.Extensibility.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.ApplicationInsights.Extensibility.DependencyCollector" />
      <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector"/>
      <Add Type="Microsoft.ApplicationInsights.Extensibility.Implementation.Tracing.DiagnosticsTelemetryModule, Microsoft.ApplicationInsights" />
      <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.RequestTrackingTelemetryModule, Microsoft.ApplicationInsights.Extensibility.Web"/>
      <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.ExceptionTrackingTelemetryModule, Microsoft.ApplicationInsights.Extensibility.Web" />
      <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.DeveloperModeWithDebuggerAttachedTelemetryModule, Microsoft.ApplicationInsights.Extensibility.Web" />
      
      </TelemetryModules>
      

      但它并没有什么不同。无论我是否对模块进行评论,仍然会生成cookie。

      尝试删除cookie,我评论了在Startup中完成的步骤,并从我的项目中排除了所有.js文件,但cookie在每次请求后都会出现。

      所以在这一点上我不明白“Application Insights Javascript”发生在哪里,我想我所缺少的是后端的东西。我错了吗?

      最后,我评论的Startup.cs看起来像:

      [assembly: OwinStartupAttribute(typeof(Try001.Startup))]
      namespace Try001
      {
          public partial class Startup
          {
               public void Configuration(IAppBuilder app)
               {   
                  //ConfigureAuth(app);
               }
          }
        }
      

      我的Global.asax.cs看起来像是:

      public class MvcApplication : System.Web.HttpApplication
      {
          protected void Application_Start()
          {
              //AreaRegistration.RegisterAllAreas();
              //FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
              RouteConfig.RegisterRoutes(RouteTable.Routes);
              //BundleConfig.RegisterBundles(BundleTable.Bundles);
          }
      }
      

      RegisterRoutes只是在进行默认路由。因此,我的目标是只使用非常基本的东西来实现它,但我不知道在哪里继续挖掘。

      有人可以启发我吗?

      感谢您的阅读。

1 个答案:

答案 0 :(得分:10)

Cookie初始化逻辑发生在Application Insights JavaScript SDK中。如果您查看页面的来源,您会注意到来自//az416426.vo.msecnd.net/scripts/a/ai.0.js的JS。您还可以在GitHub上阅读/贡献JavaScript SDK的源代码:https://github.com/Microsoft/ApplicationInsights-JS

回答你的问题:

他们什么时候初始化以及正在做什么?
它们在尝试发送任何遥测项目并检查cookie是否存在时由JavaScript SDK初始化,并创建它们。有关详细信息,请参阅https://github.com/Microsoft/ApplicationInsights-JS/blob/master/JavaScript/JavaScriptSDK/Context/User.ts,会话cookie的逻辑也类似。

如何停止使用它们?
从最新版本的JavaScript SDK开始,您现在可以通过config object控制用户信息和会话缓冲区(用于对请求进行速率限制)的cookie以及本地存储:{{3}}:< / p>

...snippet...
}({
    instrumentationKey: "<your key>",
    isCookieUseDisabled: true,
    isStorageUseDisabled: true,
    enableSessionStorageBuffer: true
});

如果我想保留它们,我怎样才能更改其到期时间?您可以控制两种设置:

  • 会话续订时间 - 会话重置前经过的时间 没有活动(默认为30分钟)
  • 会话到期时间 - 多长时间 在会话重置之前经过活动(默认为24小时)。

要更改它们,请在设置检测键旁边的此片段中设置以下值:

      ..snippet..
 }({
        instrumentationKey: "<your key>",
        sessionRenewalMs:<your custom value in ms>,
        sessionExpirationMs:<your custom value in ms>

    });