管理应用程序见解Cookie

Pli*_*iyo 11 c# asp.net azure-application-insights

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

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

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

2.

UserTelemetryInitializer使用在用户浏览器中运行的Application Insights JavaScript检测代码生成的ai_user cookie中提取的值,更新所有遥测项目的User上下文的IdAcquisitionDate属性.

SessionTelemetryInitializer更新所有遥测项的Session上下文的Id属性,其值从用户浏览器中运行的ApplicationInsights JavaScript检测代码生成的ai_session cookie中提取.(来自azure文档(使用ApplicationInsights.config配置Application Insights SKD))

所以有两个cookie:ai_sessionai_user.

这是我的问题:

  1. 他们什么时候初始化?
  2. 这是做什么的?
  3. 我怎么能停止使用它们?
  4. 如果我想保留它们,我怎么能改变他们的到期时间?

试图删除它们我使用ASP.NET Web应用程序使用Web Api的默认模板创建了一个项目,其中包括MVC和Web Api.

做研究我发现这种方法禁用它们但我没有任何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>
Run Code Online (Sandbox Code Playgroud)

而且:

<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>
Run Code Online (Sandbox Code Playgroud)

但它并没有什么不同.要么我留下评论或不评论的模块,仍然生成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);
         }
    }
  }
Run Code Online (Sandbox Code Playgroud)

我的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

RegisterRoutes只是在进行默认路由.所以我的目的是做一些非常基本的工作来使它工作,但我不知道在哪里继续挖掘.

有人可以开导我吗?

感谢您的阅读.

Ale*_*kou 11

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开始,您现在可以通过配置对象控制用户信息和会话缓冲区(用于对请求进行速率限制)的cookie以及本地存储:

...snippet...
}({
    instrumentationKey: "<your key>",
    isCookieUseDisabled: true,
    isStorageUseDisabled: true,
    enableSessionStorageBuffer: true
});
Run Code Online (Sandbox Code Playgroud)

如果我想保留它们,我怎么能改变他们的到期时间?您可以控制两种设置:

  • 会话续订时间 - 在没有活动的情况下重置会话之前经过的时间(默认为30分钟)
  • 会话到期时间 - 即使有活动也会重置会话之前经过的时间(默认为24小时).

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

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

    });
Run Code Online (Sandbox Code Playgroud)

  • 那么有没有办法在服务器端设置例如AuthenticatedUserId和AccountId,并在服务器端初始化cookie?Application Insights 是否会错过第一个请求(因为 cookie 仅在客户端设置以响应第一个请求)? (2认同)