Session 如何防止ashx重置会话超时?

Session 如何防止ashx重置会话超时?,session,httphandler,ashx,Session,Httphandler,Ashx,我很难找到这方面的任何信息,这让我觉得我做错了什么。我制作了一个ashx,为登录用户提供安全的图像。问题在于,Sql探查器跟踪显示,对于通过此机制提供的每个映像,在会话状态数据库中都会调用TempResetTimeout。这个ashx是用来取代一个aspx的,这个aspx以前也做同样的事情,但是由于很多图像和web garden的使用,导致了很多会话状态数据库死锁,yada,yada。这无疑是一个改进,因为对会话状态数据库的“readcommitted”调用少了一个,但是有一个更新意味着我们仍然

我很难找到这方面的任何信息,这让我觉得我做错了什么。我制作了一个ashx,为登录用户提供安全的图像。问题在于,Sql探查器跟踪显示,对于通过此机制提供的每个映像,在会话状态数据库中都会调用TempResetTimeout。这个ashx是用来取代一个aspx的,这个aspx以前也做同样的事情,但是由于很多图像和web garden的使用,导致了很多会话状态数据库死锁,yada,yada。这无疑是一个改进,因为对会话状态数据库的“readcommitted”调用少了一个,但是有一个更新意味着我们仍然会有一些死锁。基本上,我们不希望使用这个ashx进行任何会话交互,但这似乎没有发生

我当然没有实现iRequiresessionState接口,因此我认为我的ashx不应该以任何方式接触会话。然而,我看到Global.asax每次都会命中,Global.asax在一些代码中引用了会话。这使我试图通过web.config中的以下内容将此特定页面从任何身份验证中排除

<location path="ImageHandler.ashx">
<system.web>
    <authentication mode="None" />
</system.web>
</location>

…但这会导致ashx根本不启动(ProcessRequest中没有显示图像,也没有断点命中)。我不知道为什么会这样


如何使我的ashx ImageHandler完全不接触会话?

会话状态是在应用程序级别设置的,因此为任何ASP.NET请求禁用会话的唯一方法是将其放在IIS中自己的应用程序中并关闭会话状态

<system.web>
    <sessionState mode="Off" />
</system.web>

您还可以创建自己的会话状态模块(可能尝试包装现有的会话状态模块),但这也需要IIS配置将另一个文件夹设置为应用程序,或者在根应用程序上替换它


虽然这看起来比在IIS中配置为应用程序的子文件夹中关闭它要费劲得多。

如果在引用此ashx时可以阻止调用Global.asax,那就太好了,但我不知道该怎么做,请注意,iRequestResessionState和IReadOnlySessionState只讨论“会话状态值”,仅此而已。它没有说它不会读取会话cookie并加载给定页面请求的会话(从而重置超时)。将包含my ashx的文件夹设置为应用程序并关闭该应用程序的会话听起来像是一种方法。谢谢你的帮助。