3

我在 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")
}

现在我知道在这种情况下我可以只返回共享消息视图,但这只是重现问题的代码示例。

CustomSignupService.Activate通过 NHibernate 进行数据库查找并更新事务中的用户(用户激活)。有时(假设在 5 分钟内尝试 1/5 次)TempData 无法通过重定向,因此我添加了登录到 Session_End 并注意到在调用 RedirectToAction 时会话结束。在调用 Session_Start 之后,当然 TempData 已经消失了。

会话具有默认超时(20 分钟)并且控制器使用SessionStateBehavior.ReadOnly

有任何想法吗?

更新

第 1 步:这不是应用程序池回收(我打开了应用程序池上的所有常规回收事件日志条目并检查了事件日志,会话重新启动后但回收没有导致它)

4

2 回答 2

3

我遇到了会话丢失的问题。我使用 Fiddler 并注意到有一个重复的 ASP.NET 会话 cookie,其值为空白。我不知道它是怎么到那里的。因此,每个请求都会创建一个新会话。我删除了那个重复的cookie,问题就解决了。

其他不太可能的原因是:

IIS进程回收

Session.abandon 被调用

修改 bin 文件夹或 web.config 导致应用重启

看看这个页面:

丢失会话状态

于 2013-04-28T07:35:55.737 回答
1

我不知道 ASP.NET MVC,但在黑暗的世纪里,我使用没有 MVC 的 ASP.NET。我多次因意外的会议结束而挣扎。大多数情况下,它是由文章http://www.c-sharpcorner.com/uploadfile/technoNet/session-timeouts-causes-and-remedies/中描述的一些简单事情引起的

有时,服务器在事件日志中有条目,可为您提供更多信息。

其他一些解决方案可能是

ASP.NET 会话突然结束

随机 IIS 会话超时

于 2013-04-28T07:33:58.087 回答