ASP.NET迁移项目后Session变量丢失问题求助
以下是针对你遇到的Session丢失问题的排查和解决步骤:
检查Web.config中的Session状态配置
打开项目的web.config文件,定位到<system.web>节点下的<sessionState>配置,确保Session模式为InProc(本地正常运行的项目默认是这个模式),且未禁用Session。示例配置如下:<sessionState mode="InProc" timeout="20" />迁移过程中可能误改了配置,或者服务器环境下的默认配置与本地不同,这会直接导致Session无法持久化。
验证重定向后的Session Cookie传递
在设置Session["Usuario"]后使用RedirectToAction("Inicio")会触发新的HTTP请求,此时需要确认ASP.NET的Session Cookie(ASP.NET_SessionId)是否正确传递到新请求中。打开Chrome开发者工具(F12)切换到Application标签,查看Cookies列表,检查该Cookie是否存在、域名和路径是否匹配当前调试地址。如果Cookie丢失,Session自然无法在新请求中读取。排查IIS与IIS Express的冲突
服务器上同时安装了IIS和使用IIS Express调试,可能存在端口占用、应用池配置冲突的情况。尝试先停止IIS服务(通过服务管理器找到World Wide Web Publishing Service并停止),然后重启Visual Studio的调试会话,观察Session是否能正常保留。另外,右键项目→属性→Web→服务器,确认IIS Express的配置文件中Session状态已启用。确认项目未禁用Session
检查项目中的Controller类,确保没有添加[SessionState(SessionStateBehavior.Disabled)]特性(该特性会直接禁用当前Controller的Session)。同时查看Global.asax文件,确认自定义的Session_Start或Session_End事件中没有清空Session的逻辑。临时测试直接返回视图
临时修改代码,将RedirectToAction("Inicio")替换为直接返回Inicio视图,验证Session是否能正常读取:if (nombre != null) { Session["Usuario"] = nombre; ViewBag.error = ""; return View("Inicio"); }如果这样Session能正常获取,说明问题出在重定向时的Cookie传递,可能是服务器环境的Cookie安全设置(如SameSite、Secure属性)导致Cookie未被携带到新请求中。
内容的提问来源于stack exchange,提问作者Erik

