我想知道应用程序见解如何与Cookie一起使用,因为我想了解用户和会话跟踪,所以我一直在研究和...
以下是该理论的简要介绍:
每当Application Insights SDK获得一个没有应用程序洞察用户跟踪cookie的请求(由Application Insights JS代码段设置)时,它将设置此cookie并启动一个新会话。 (来自apmtips)
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 。
以下是我的问题:
尝试删除它们我使用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只是在进行默认路由。因此,我的目标是只使用非常基本的东西来实现它,但我不知道在哪里继续挖掘。
有人可以启发我吗?
感谢您的阅读。
答案 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
});
如果我想保留它们,我怎样才能更改其到期时间?您可以控制两种设置:
要更改它们,请在设置检测键旁边的此片段中设置以下值:
..snippet..
}({
instrumentationKey: "<your key>",
sessionRenewalMs:<your custom value in ms>,
sessionExpirationMs:<your custom value in ms>
});