【发布时间】:2018-06-01 16:51:04
【问题描述】:
我想知道应用程序洞察如何与 cookie 一起使用,因为我想了解用户和会话跟踪,所以我一直在研究并...
这里简单介绍一下这个理论:
只要 Application Insights SDK 收到没有应用程序洞察用户跟踪 cookie(由 Application Insights JS sn-p 设置)的请求,它就会设置此 cookie 并启动新会话。 (来自apmtips)
2.
UserTelemetryInitializer 更新 User 上下文的 Id 和 AcquisitionDate 属性,用于所有具有从ai_user cookie,由在用户浏览器中运行的 Application Insights JavaScript 检测代码生成。
SessionTelemetryInitializer 更新 Session 上下文的 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 只是在做默认路由。所以我的目标是只做非常基本的事情来让它工作,但我不知道在哪里继续挖掘。
有人可以启发我吗?
感谢您到目前为止的阅读。
【问题讨论】:
-
"app insight javascript" 实际上是一个 javascript sn-p,它位于模板 html/cshtml/master 文件之一中,具体取决于您拥有的项目类型。您是自己手动添加了 AI,还是在新项目中使用了 VS 中的“添加应用程序洞察遥测...”命令?
-
就是这样,不是我猜的后端,而是_Layout.cshtml中的JS sn-p。非常感谢您为我指明了正确的方向!
-
显然我应该添加这个作为答案,所以 alexb 没有窃取我的互联网积分! :P
-
@JohnGardner 一句话答案与完整解决方案没有可比性;-)
-
@HelloWorld 好吧,是的,我会发布更多,我在问一个澄清问题,你不能在答案中做到这一点。此外,答案已被编辑为比原来的内容更多:P
标签: c# asp.net azure-application-insights