我无法找到任何相关信息,这让我觉得我做错了什么。我制作了一个 ashx,为我们的登录用户提供安全图像。问题在于,Sql Profiler 跟踪显示,在 session 状态数据库中为通过此机制提供的每个图像调用了 TempResetTimeout。这个 ashx 的构建是为了替换一个 aspx,它曾经做同样的事情,但由于许多图像和网络花园的使用而导致许多 session 状态数据库死锁,yada,yada。这绝对是一项改进,因为减少了对 session 状态数据库的“已提交读取”调用,但事实上有更新意味着我们仍然可能会遇到一些死锁。基本上,我们不希望使用这个 ashx 来进行任何 session 交互,但这似乎并没有发生。
我当然没有实现 IRequiresSessionState 接口(interface),所以我相信我的 ashx 不应该以任何方式接触 Session。然而,我看到 Global.asax 每次出现都会命中,并且 Global.asax 在其某些代码中引用了 session 。这导致我尝试通过 web.config 中的以下内容从任何类型的身份验证中排除此特定页面...
<location path="ImageHandler.ashx">
<system.web>
<authentication mode="None" />
</system.web>
</location>
...但这会导致 ashx 根本不触发(没有显示图像,并且 ProcessRequest 中没有断点命中)。我不确定为什么会发生这种情况。
如何让 ashx ImageHandler 完全不接触 session ?
最佳答案
SessionState 是在应用程序级别设置的,因此禁用任何 ASP.NET 请求的 session 的唯一方法是将其放入 IIS 中自己的应用程序中,并且关闭 session 状态。
<system.web>
<sessionState mode="Off" />
</system.web>
http://msdn.microsoft.com/en-us/library/h6bb9cz9.aspx
您还可以创建自己的 session 状态模块(也许尝试包装现有的 session 状态模块),但这也需要 IIS 配置将另一个文件夹设置为应用程序,或者在根应用程序上替换它。
http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatemodule.aspx
尽管这看起来比仅仅为 IIS 中配置为应用程序的一个子文件夹关闭它要花费更多的精力。
关于session - 如何防止 ashx 重置 session 超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1348463/