我有一个ASP.NET MVC 3应用程序。该网站涉及人们使用网络表单中的textarea撰写冗长的回复。有时,用户抱怨他们在发布数据后会被重定向到登录表单。我不确定他们为什么会被注销,因为用户通常不会提供有关其错误的足够信息。我认为这是由于会话超时或应用程序因某种原因重新启动。这是在共享的Web托管站点上,它没有自己的应用程序池。
在任何情况下,无论原因如何,我都想捕获该帖子数据并将其保存到数据库或文本文件中。如何在控制器将用户重定向到登录屏幕时获取发布数据并保存。
我知道长期计划是确定超时发生的原因。但是现在我希望能够获取后期数据并在以后恢复它。
答案 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页面之前捕获它们。