今天在改博客系统的一个Bug的时候,程序里用了Session,结果一跑就报错:只有在配置文件或 Page 指令中将 enableSessionState 设置为 true  时,才能使用会话状态。还请确保在应用程序配置的<configuration>\<system.web>\<httpModules>节中包括  System.Web.SessionStateMod 或自定义会话状态模块。然而用VS自带的Web Server调试一点问题都没有。唯独在IIS下跑的时候老报错,错误语句就是那行用了Session的程序。唯一的区别就是VS下调试时,URL没有重写。于是我回到IIS上,用完整的URL试了下,果然木有问题。

我所使用的是URLRewriter.dll,似乎是当年微软提供的,经过一番查找,似乎有很多人和我有同样的问题,不管他们用的是不是URLRewriter.dll。

奇怪的是,并不是每个版本的IIS都会丢Session。我本机和网站服务器用的是IIS7,而且是集成模式的,比较奇葩,有很多config都要另外去写,这次也不例外,还是通过web.config解决问题:

<system.webServer>\<modules>下,添加:

<remove name="Session" />
<add name="HtmlSession" type="System.Web.SessionState.SessionStateModule"/>

丢Session的问题就解决了~