【问题标题】:Session ends randomly after redirect重定向后会话随机结束
【发布时间】:2013-04-22 01:15:00
【问题描述】:

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

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

有什么想法吗?

更新

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

【问题讨论】:

  • 类似主题;我的回答可能会有所帮助:stackoverflow.com/a/23804262/3253726
  • 我的行为完全相同。你找到根本原因了吗?
  • 不,遗憾的是我没有@jas
  • 最后,我认为我的问题有所不同。有人将应用程序池回收设置为低请求数,并且在负载测试期间回收非常快,导致此问题。 (设置为 500,但我们每秒发出 100 个请求)@PavleGartner

标签: c# .net session asp.net-mvc-4 redirecttoaction


【解决方案1】:

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

其他不太可能的原因是:

IIS 进程回收

Session.abandon 被调用

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

查看此页面:

Losing Session State

【讨论】:

    【解决方案2】:

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

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

    还有一些其他的解决方案可能是

    ASP.NET Session ending abruptly

    random IIS session timeout

    【讨论】:

      猜你喜欢
      • 2018-08-06
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 2022-08-20
      • 1970-01-01
      相关资源
      最近更新 更多