Javascript 如何防止会话过期时表单数据丢失? 问题:
使用ASP.NET VB和/或JavaScript如何防止用户在会话过期时丢失表单数据Javascript 如何防止会话过期时表单数据丢失? 问题:,javascript,asp.net,vb.net,session,timeout,Javascript,Asp.net,Vb.net,Session,Timeout,使用ASP.NET VB和/或JavaScript如何防止用户在会话过期时丢失表单数据 问题 当前,当用户填写表单数据的时间超过会话超时时间时,由于会话到期,post中的所有表单数据都会丢失 客户端操作,如键入不会重置会话超时时间 想法 我想知道如何防止这个问题发生 我最初的想法是发送一条通知消息,警告即将到期 以及重置会话计时器的选项 另一种方法是将按键或鼠标移动传递给服务器,以自动刷新会话计时器 在单页应用的时代,如果你需要使用老式的方法,我的建议是创建Ajax请求,不断更新网站中
问题 当前,当用户填写表单数据的时间超过会话超时时间时,由于会话到期,post中的所有表单数据都会丢失 客户端操作,如键入不会重置会话超时时间
想法 我想知道如何防止这个问题发生
- 我最初的想法是发送一条通知消息,警告即将到期 以及重置会话计时器的选项
- 另一种方法是将按键或鼠标移动传递给服务器,以自动刷新会话计时器
Public Class KeepSessionAlive
Implements IHttpHandler, IRequiresSessionState
Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
context.Session("KeepSessionAlive") = DateTime.Now
End Sub
ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class
确保您的泛型处理程序类实现了如上所述的IRequiresessionState
然后在表单页面中,使用jQuery.post
以您选择的时间间隔发布上述处理程序的请求。例如:
<script type="text/javascript">
$(function () {
setInterval(function () { $.post('<%= ResolveClientUrl("~/KeepSessionAlive.ashx")%>'); }, 10000); ' 10 secs interval
});
</script>
在表单页面上,只需在body标签上输入onload脚本:
<body onload="sessionTimeout(<%=session.Timeout %>)">
因此,如果您的超时设置为10分钟,用户将在第9分钟收到警报。当然,您可能希望在用户单击“确定”按钮时更改代码。我上面的代码将刷新页面,这肯定不是您想要做的,否则,用户的数据将丢失。您可以使用上面解决方案1中的通用处理程序来重置会话,并再次调用
sessionTimeout
来重置客户端超时倒计时。问题是页面上的数据需要安全,因此也需要使用会话超时来达到其预期目的。好的,其他方法与您最初的想法类似:while加载页面创建一个javascript变量,该变量具有用户在会话过期之前的时间限制。然后每隔几秒钟在超时时运行一些js函数,查看自上次刷新以来经过的时间是否已达到会话过期超时。如果检测到这种情况,则可以像a)禁用post按钮b)使用登录选项显示一些弹出窗口c)使用登录屏幕打开弹出页面等。登录弹出窗口是一个好主意。您可以在表单的onsubmit事件中使用ajax调用来查看用户是否仍在登录。如果没有,请取消提交并显示登录弹出窗口。登录后,他们可以提交表格。
<body onload="sessionTimeout(<%=session.Timeout %>)">