ASP.NET – Javascript timeOut警告基于web.config中的sessionState timeOut
问题:我希望在asp.net页面上创建一个超时警告消息,其中ac#代码基于我的webconfig sessionState TimeOut属性。
web.config上的代码:
伪代码:
- 在codebehind中读取超时设置
- 注册ClientScriptblock(
setTimeout
通过超时期限(20 * 60)) - 超时时,在页面上显示警告标签
示例代码:
public void RegisterTimeoutWarning(System.Web.UI.Page Page) { var timeout = HttpContext.Current.Session.Timeout * 60 * 1000; Page.ClientScript.RegisterStartupScript(Page.GetType(), "timeoutWarning", string.Format("setTimeout(function () {{ alert('Session about to expire'); }}, {0});", timeout), true); }
当然,您可以通过显示警告弹出窗口甚至是确认弹出窗口来改进客户端显示(而不是显示警报),然后您可以使用它来续订会话。
我无法使FishbasketGordo的代码工作,因为Web方法调用保持传递布尔值“false”作为onsuccess方法。 经过大量研究后,我做了以下更改。
$(function () { var isTimeout = false; var callback = function (isTimeout) { if (isTimeout) { // Show your pop-up here... alert("You have timed out"); } }; var failure = function () { alert("Problem with Server"); }; setInterval( function () { // Don't forget to set EnablePageMethods="true" on your ScriptManager. PageMethods.HasSessionTimedOut(callback,failure); }, 30000 ); });
试试这个解决方案(需要一个脚本管理器):
之前我已经通过在我的代码隐藏文件中创建一个检查超时的Web方法来完成此操作。 让您的Javascript函数通过AJAX获取超时信息并显示警告。
例
这是我的代码隐藏中的Web方法:
[WebMethod] public static bool HasSessionTimedOut() { HttpSessionState session = HttpContext.Current.Session; // I put this value into Session at the beginning. DateTime? sessionStart = session[SessionKeys.SessionStart] as DateTime?; bool isTimeout = false; if (!sessionStart.HasValue) { isTimeout = true; } else { TimeSpan elapsed = DateTime.Now - sessionStart.Value; isTimeout = elapsed.TotalMinutes > session.Timeout; } return isTimeout; }
这是我的Javascript:
所以,这非常简陋。 每隔30秒,我的Javascript函数就会使用ASP.NET的PageMethods对象向我的web方法发送一个AJAX请求。 它在回调中检查返回值true,表示发生了超时,并采取适当的操作。
从我的博客中使用Jquery尝试此Seesion警报 :
- 会话设置为超时(例如30分钟)。
- 会话超时时,用户已注销。
- 显示倒计时,以便用户知道剩余时间。
- 在用户接近极限时通知用户(例如,还剩5分钟)。
- 让用户知道他们由于不活动而自动超时。
我在asp.net edit.aspx页面上使用以下javascript代码创建了一个超时警告消息,请求用户在会话超出x个剩余分钟数之前保存数据:
我将警告消息的频率设置为每20分钟一次,并通过将其作为应用程序设置下的变量轻松更改,该设置也可以在web.config下访问并定义为密钥(SessionWarning)w / a值为20(表示20分钟)。
这是我在web.config文件中使用的代码: