【问题标题】:Session state can only be used when enableSessionState is set to true会话状态只能在 enableSessionState 设置为 true 时使用
【发布时间】:2012-10-27 22:56:47
【问题描述】:

我没有使用 MVC、URL 重写、自定义 HTTP 模块等。从继承 System.Web.UI.Page 的网页或通过 System.Web.HttpContext.Current 对 Session 属性进行基本调用。会话,我收到以下错误:

会话状态只能在 enableSessionState 设置为 true 时使用,无论是在配置文件中还是在 Page 指令中。还请确保 System.Web.SessionStateModule 或自定义会话状态模块包含在应用程序配置的 <configuration>\<system.web>\<httpModules> 部分中。

经过一番研究,我实现了如下Web.config,但仍然出现错误。我正在使用内置的 Web 服务器从 Visual Studio 2010 中调试 Web 应用程序。

<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
        <sessionState mode="InProc" timeout="60" cookieless="false" />
        <pages enableSessionState="true" />
        <httpModules>
            <remove name="Session" />
            <add name="Session" type="System.Web.SessionState.SessionStateModule" />
        </httpModules>
    </system.web>
</configuration>

【问题讨论】:

  • 使用您的 web.config 示例,我在 Visual Studio 2010 中创建了一个新的 .NET 4.0 Web 应用程序,并且能够更新会话变量。我想知道您的应用程序中是否还有其他原因导致问题。您能否发布一个仍然存在问题的应用的精简版本?
  • @csm8118 我太能够在请求的早期更新会话变量。但是,当我稍后在请求中尝试访问该 Session 变量时,我遇到了这个问题。
  • 您在请求中的什么时候收到错误?您可以发布引发错误的代码吗?
  • @csm8118 流程如下: 1) 用户通过 Default.aspx 登录。如果登录成功,则在 Default.aspx 的代码旁为用户设置会话。这分配得很好。 2) 用户被重定向到 Home.aspx。 Home.aspx 的代码旁边继承了一个名为 BasePage 的自定义类,该类继承了 System.Web.UI.Page。在 BasePage 中,它正在尝试访问 Session(我已经通过 Session 和 System.Web.HttpContext.Current.Session 尝试过),这就是异常发生的时候。
  • 看来 Home.aspx 是当时的罪魁祸首。您可以发布 Home.aspx 的 .aspx 页面吗? Home.aspx 的页面指令中是否有EnableSessionState="false"(.aspx 顶部的&lt;%@ Page ...)?

标签: asp.net session web-config session-state


【解决方案1】:

您的问题很简单。如果您将代码从在 Session_Start 全局事件之后执行的地方转移,那么您会很轻松地看到这个问题。例如,在 Page_Init 事件中编写您的代码或覆盖 OnInit 并在那里对您的 Session 做任何您想做的事情。

希望这对你有用。

【讨论】:

    【解决方案2】:

    我花了很多时间调试这个问题。 我们的网站直到昨天都正常工作,但突然停止工作并出现错误。

    只有在 enableSessionState 设置为 true 时才能使用会话状态,无论是在配置文件中还是在 Page 指令中。还请确保 System.Web.SessionStateModule 或自定义会话状态模块包含在应用程序配置的 \\ 部分中。

    选中时,服务列表中缺少 ASP.net 状态服务。

    如下重新安装有助于解决问题。

    C:\Windows\Microsoft.Net\Framework64\v4.0.30319\aspnet_regiis -i

    【讨论】:

    • 谢谢。它帮助了我。无论如何,在 Visual Studios 和其他应用程序和依赖项安装后的新系统上,我遇到了会话状态异常。是的,它可以通过删除 Session 模块并再次添加来轻松解决,但这不是出路。会话模块不一定应该包含在模块中
    【解决方案3】:

    这个问题在我已知的场景中重现....

    如果浏览器出现一个框架集或两个并行请求,如果这两个页面具有相同的自定义基础页面,则访问会话会由于多个工作线程而导致此异常...

    更新: 对于这个问题的所有患者,我在这里有我的发现! 1. 我可以在 IE 浏览器 (IE10) 和 FIREFOX(22) 中重现此问题,尽管我在本地代码中设置了所有已启用的..etc.etc...,当连接选项卡中的 IE 设置 --> LAN设置有“为本地主机使用代理服务器...”复选框显示为已检查 - 没有有效的代理服务器设置...

    当我在 IE 中取消选中此选项时,具有 DEFAULT Session 设置的相同代码会像 HORSE 一样运行!!

    希望能给点光明,

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 2021-05-13
      • 1970-01-01
      • 2013-12-14
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多