我在ASP .NET MVC 4中遇到一个奇怪的问题。在 AccountController 中,我正在对某些操作进行重定向,并在此之前将数据放入TempData(存储在Session中):
[AllowAnonymous]
public ActionResult Activate(string token)
{
new CustomSignupService().Activate(token);
TempData["Message"] = "User was successfully confirmed";
return RedirectToAction("Message", "Home")
}
现在我知道在这种情况下我可以返回共享的Message视图,但这只是一个重现问题的代码示例。
CustomSignupService.Activate 通过NHibernate进行数据库查找,并在事务中更新用户(用户激活)。 有时(假设在5分钟内完成1/5尝试)TempData没有通过重定向,所以我添加了登录到Session_End并注意到会话在RedirectToAction被调用时结束。在调用Session_Start之后,当然TempData已经消失了。
会话具有默认超时(20分钟),控制器使用 SessionStateBehavior.ReadOnly
有什么想法吗?
更新
步骤1:不是应用程序池回收(我打开了应用程序池上的所有常规回收事件日志条目,并在会话重新启动后检查了事件日志,但是回收没有导致它)
答案 0 :(得分:3)
我遇到了Session丢失的问题。我使用了Fiddler并注意到有一个重复的ASP.NET会话cookie,其空值。我不知道它是怎么到达那里的。因此,每个请求都创建了一个新会话。我删除了那个重复的cookie,问题解决了。
其他不太可能的原因是:
IIS进程回收
调用Session.abandon
修改bin文件夹或web.config导致app restart
查看此页面:
答案 1 :(得分:1)
我不知道ASP.NET MVC,但在黑暗的世纪里我使用没有MVC的ASP.NET。我在意外的会话结束时多次挣扎。大多数情况下,它是由文章http://www.c-sharpcorner.com/uploadfile/technoNet/session-timeouts-causes-and-remedies/
中描述的一些简单事物引起的有时,服务器在事件日志中有条目,可以为您提供更多信息。
其他一些解决方案可能