【发布时间】:2010-10-29 03:02:50
【问题描述】:
在我的项目中,我已将 .NET 的会话配置为进入数据库。 我还有一个实现 Session_Start() 的 global.asax。 在 Session_Start() 中,我在会话中写了三件事:
- 会话开始的时间。
- 用户的主机地址。
- 包装用户代理的可序列化设备对象。
现在的问题是不允许 cookie 的用户也不允许会话 cookie。 (通过将站点 URL 放入 IE 的受限站点,可以轻松重现)。
如果我继续刷新(按 F5),则会为每个请求创建一个新会话(-> 没有会话 cookie)。很快,Web 服务器进程增长到数百兆字节。 使用 IIS7 或 Cassini Local Webserver 都没有关系。
现在的问题是:在会话超时之前不会释放内存。如果会话真的应该进入数据库,这里的逻辑是什么? .NET 会将它们保留在内存中多久?最终,您甚至会遇到 Out Of Memory 异常!
有人知道吗?如何检测和预防此类(几乎是恶意的)“攻击”?
勒内
【问题讨论】: