You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地正常服务器部署后Session空引用异常:需检查服务器或配置?

解决Session在Windows服务器部署后为空的问题

先检查web.config配置

  • 确认Session状态配置
    确保<system.web>节点下的<sessionState>配置正确,单服务器场景推荐使用InProc模式(和本地默认配置保持一致):

    <system.web>
      <sessionState mode="InProc" cookieless="false" timeout="20" />
      <!-- 同时确认页面允许Session功能 -->
      <pages enableSessionState="true" />
    </system.web>
    

    注意:如果服务器是多实例IIS集群,InProc模式会导致Session无法跨实例共享,需要切换到StateServer或SQLServer模式,但优先从单服务器的基础配置排查。

  • 检查认证Cookie配置(如果使用Forms认证)
    若项目用了Forms认证,确保Cookie设置不会阻碍Session传递,比如关闭不必要的requireSSL(如果服务器未配置HTTPS):

    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" requireSSL="false" />
    </authentication>
    

再检查Windows服务器(IIS)设置

  • IIS会话状态配置
    打开IIS管理器,定位到你的站点:

    1. 双击「会话状态」功能
    2. 确认「会话状态模式」为「进程内」(和本地环境一致)
    3. 检查「超时」设置,确保不是0或过短的时间
  • 应用程序池回收设置
    应用程序池回收会直接清空InProc模式的Session,检查以下配置:

    1. 找到站点对应的应用程序池,右键选择「高级设置」
    2. 查看「回收」部分,取消「固定时间间隔(分钟)」的勾选(或设置为较长时间,比如1440分钟)
    3. 查看「进程模型」的「闲置超时(分钟)」,设置为0表示不自动回收闲置进程
  • 服务器安全软件/防火墙
    排查是否有服务器上的安全软件或防火墙规则拦截了HTTP Cookie(Session依赖Cookie传递会话ID),可暂时关闭测试是否恢复正常。

代码层面临时优化(治标)

在使用Session值前先判空,避免空引用错误:

public ActionResult About()
{
    ViewBag.Message = Session["name"]?.ToString() ?? "Session未找到";
    return View();
}

内容的提问来源于stack exchange,提问作者javad bayat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 21:40:21