【问题标题】:Glimpse - How do I access HttpContext.Session inside an IRuntimePolicy一瞥 - 如何在 IRuntimePolicy 中访问 HttpContext.Session
【发布时间】:2014-09-12 02:20:33
【问题描述】:

我很喜欢用于 ASP.NET 的 Glimpse Web 诊断平台,并希望将其部署到生产环境中以捕获有关最终用户交互的数据以帮助进行故障排除。显然,我想锁定访问权限,这样不只是任何人都可以访问 Glimpse 捕获的所有数据。

我已经实现了 GlimpseSecurityPolicy(IRuntimePolicy 的一个实例)并通过调试断点确认当我在我的网站上请求页面时调用了 Execute 方法。

问题是我无法询问与当前 HttpContext 关联的会话。我可以通过调用 policyContext.GetHttpContext()... 来获取上下文的实例...但是那个上下文对象有一个空的Session 属性。如果通过HttpContext.Current 检索,该属性也为空。

在我的主应用程序代码的其他地方访问当前上下文时(通过HttpContext.Current),Session 属性被填充,我可以很好地与之交互。

所以我有两个相关的问题:

  • 为什么没有填充Session 属性?
  • 如何从 Glimpse IRuntimePolicy 中访问当前的 Session

如果有帮助,我将在运行 ASP.NET MVC 5.2 的网站上运行 Glimpse 1.8.5。我还保留了 IRunTimePolicy ExecuteOn 属性,返回默认的 return RuntimeEvent.EndRequest | RuntimeEvent.ExecuteResource;

【问题讨论】:

    标签: asp.net asp.net-mvc session glimpse


    【解决方案1】:

    原因是您的IRuntimePolicy 实际上正在执行到管道的后期。正如您所说,您保留了ExecuteOn 属性的默认值,并且会话在RuntimeEvent 之前关闭。

    如果您将ExecuteOn 的值更改为RuntimeEvent.BeginSessionAccess | RuntimeEvent.ExecuteResource,则Session 属性应该在您的IRuntimePolicy 实现中可用。

    关于RuntimeEvent.ExecuteResource,只有当您的IRuntimePolicy 实际用于强制资源访问(也就是用于 Glimpse 授权)时才需要此选项,请参阅this blog post 了解更多详细信息。因此,如果不是这种情况,那么您也可以将其删除。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多