在ASP.NET MVC 3应用程序中,如何将发布数据保存在会话超时的位置

时间:2011-10-25 13:27:00

标签: asp.net-mvc session post timeout

我有一个ASP.NET MVC 3应用程序。该网站涉及人们使用网络表单中的textarea撰写冗长的回复。有时,用户抱怨他们在发布数据后会被重定向到登录表单。我不确定他们为什么会被注销,因为用户通常不会提供有关其错误的足够信息。我认为这是由于会话超时或应用程序因某种原因重新启动。这是在共享的Web托管站点上,它没有自己的应用程序池。

在任何情况下,无论原因如何,我都想捕获该帖子数据并将其保存到数据库或文本文件中。如何在控制器将用户重定向到登录屏幕时获取发布数据并保存。

我知道长期计划是确定超时发生的原因。但是现在我希望能够获取后期数据并在以后恢复它。

3 个答案:

答案 0 :(得分:1)

首先,为了避免超时,我建议使用客户端心跳解决方案(如http://plugins.jquery.com/project/Heartbeat

其次,假设您正在使用表单身份验证,为了保存发布的数据,当表单授权模块重定向您的用户时,您需要拦截Global.asax中的EndRequest HttpApplication事件处理程序中的重定向或您的自己的模块。

拦截这些请求的方法并不那么简单,因为在“EndRequest”管道步骤中,您将看到302 HTTP状态代码(重定向指令),而不是401(未授权错误)。因此,您可以检查请求是否未经过身份验证(HttpContext.User.Identity.IsAuthenticated)并重定向请求 - 在这种情况下,您可以保存您在请求中看到的内容。

否则你需要禁用表单身份验证并使用一些更接近ASP.NET MVC的解决方案。

答案 1 :(得分:0)

一个解决方案可以是放置一个javasscript计时器,它在指定的时间间隔内继续命中服务器以保持会话处于活动状态,直到你找出会话超时的原因(只有我的会话超时问题)

答案 2 :(得分:0)

如果要停止会话超时,可以在页面上添加隐藏的iframe。例如,创建一个名为KeepSessionAlive的新页面并执行以下操作:

<meta http-equiv="refresh" content="600">

其中content = seconds。 我不知道MVC 3,但是你可以获取并存储post值的方法是在将用户重定向到Login页面之前捕获它们。