代码之家  ›  专栏  ›  技术社区  ›  LukáÅ¡ Lánský

如何关闭特定目录的会话状态?

  •  0
  • LukáÅ¡ Lánský  · 技术社区  · 11 年前

    我有一个将数据存储在数据库中的自定义会话提供程序,因此获取会话状态不是一个廉价的操作。我也有 runAllManagedModulesForAllRequests="true" 在我的 web.config ,因此对每个映像请求都会对会话进行初始化。

    因此,我正在努力关闭具有静态资源的目录的会话状态。不幸的是,设置 <sessionState mode="Off" /> 因为这是应用程序级别的选项,所以文件夹不起作用。

    我可以在自定义会话提供程序的代码中处理这个问题,但我想知道是否有一些更干净、更具声明性的解决方案。

    编辑: <pages enableSessionState="false" /> 似乎没有帮助,因为它可能仅与ASP.NET页面和控件相关。

    2 回复  |  直到 11 年前
        1
  •  2
  •   Samer Aburabie    11 年前

    我认为这是不可能的,考虑一下,因为会话是为整个应用程序提供的,你可以在这个文件夹中说我有,但我没有,你所能做的就是自定义代码,让你的提供者的昂贵操作不按照特定条件运行,将其正确地放在你的页面生命周期中。

        2
  •  2
  •   user2030561    11 年前

    我在尝试使用无烹饪会话的WebServices时遇到了同样的问题。我用符号链接解决了这个问题。以下是步骤:

    1) 在IIS中使子目录成为自己的应用程序

    2) 将其放在子目录web.config中:

        <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.web>
            <sessionState mode="Off" />
        </system.web>
    </configuration>
    

    3) 创建一个符号链接,将BIN重定向到您自己的BIN。在我的示例中,子目录仅比主应用程序低一级。所以我在子目录中执行了以下命令:

    mklink /D bin ..\bin
    

    就是这样。它将从主BIN目录加载程序集,并从主应用程序继承其所有其他设置。