如何关闭某个目录的会话状态?

时间:2014-08-21 09:00:30

标签: asp.net session

我有一个自定义会话提供程序,用于将数据存储在数据库中,因此获取会话状态并不是一个便宜的操作。我的runAllManagedModulesForAllRequests="true"中也有web.config,所以每次对图片的请求都会被会话化。

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

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

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

2 个答案:

答案 0 :(得分:2)

我不认为这是可能的,想一想,因为会话是为整个应用程序提供的,你可以说在这个文件夹我有,而且我没有,你所能做的只是自定义代码您的提供商不能按照特定条件运行的昂贵操作,请将其正确放置在页面生命周期中。

答案 1 :(得分:2)

我遇到了尝试使用无Cookie会话进行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。在我的示例中,子目录仅比我的主应用程序低1级。所以我从子目录中执行了这个命令:

mklink /D bin ..\bin

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