C# ASP.NET-基于web.config中sessionState timeOut的Javascript超时警告
问题:我希望在asp.net页面上根据我的webconfig sessionState TimeOut属性创建一条超时警告消息,并使用c#代码隐藏 web.config上的代码:C# ASP.NET-基于web.config中sessionState timeOut的Javascript超时警告,c#,javascript,session-state,session-timeout,C#,Javascript,Session State,Session Timeout,问题:我希望在asp.net页面上根据我的webconfig sessionState TimeOut属性创建一条超时警告消息,并使用c#代码隐藏 web.config上的代码: 我以前通过在代码隐藏文件中创建一个web方法来检查超时,从而完成了这项工作。让Javascript函数通过AJAX获取超时信息,并根据这些信息显示警告 示例 这是我的代码隐藏中的web方法: [WebMethod] public static bool HasSessionTimedOut() { HttpSe
我以前通过在代码隐藏文件中创建一个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:
<script type="text/javascript">
$(function() {
var callback = function(isTimeout) {
if (isTimeout) {
// Show your pop-up here...
}
};
setInterval(
function() {
// Don't forget to set EnablePageMethods="true" on your ScriptManager.
PageMethods.HasSessionTimedOut(false, callback);
},
30000
);
});
</script>
$(函数(){
var callback=函数(isTimeout){
如果(isTimeout){
//在这里显示您的弹出窗口。。。
}
};
设定间隔(
函数(){
//不要忘记在ScriptManager上设置EnablePageMethods=“true”。
HasSessionTimedOut(false,回调);
},
30000
);
});
所以,这是相当基本的。每30秒,我的Javascript函数使用ASP.NET的PageMethods对象向我的web方法发送一个AJAX请求。它在回调中检查返回值true,该值指示超时已发生,并采取相应的操作。伪代码:
- 读取codebehind中的超时设置
- 注册ClientScriptblock(
通过超时时间(20*60))setTimeout
- 超时时,在页面上显示警告标签
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);
}
当然,您可以通过显示警告弹出窗口或确认弹出窗口来改进客户端显示(而不是显示警报),然后您可以使用确认弹出窗口来续订会话。尝试此解决方案(需要脚本管理器):
//抓住计时器
var iddleTimeoutWarning=null;
var iddleTimeout=null;
//加载页面并完成部分回发后,ASP.NET AJAX将自动调用此函数
函数pageLoad(){
//从以前的回发中清除所有旧计时器
if(iddleTimeoutWarning!=null)
clearTimeout(iddleTimeOverWarning);
if(iddleTimeout!=null)
clearTimeout(iddleTimeout);
//从web.config读取时间
var millisectimeoverning=;
var millisecTimeOut=;
//设置超时以在用户处于非活动状态时显示警告
IDDLETIMEOWWARNING=setTimeout(“displaydledwarning()”,MilliSecTimeOWWARNING);
iddleTimeout=setTimeout(“TimeoutPage()”,millisecTimeOut);
}
函数displaydlewarning(){
警报(“由于不活动,您的会话即将过期。”);
}
函数TimeoutPage(){
//刷新页面对于这个示例,我们可以重定向到另一个页面,该页面包含清除会话变量的代码
location.reload();
}
我在我的asp.net edit.aspx页面上创建了一条超时警告消息,要求用户在会话在剩余的x分钟内超时之前保存数据,使用以下javascript代码:
var sessionTimeoutWarning=“”;
var sessionTimeout=“”;
var sTimeout=parseInt(sessionTimeoutWarning)*60*1000;
setTimeout('SessionWarning()',sTimeout);
函数SessionWarning()
{
var message=“您的会话将在另一个”+(parseInt(sessionTimeout)-parseInt(sessionTimeoutWarning))+“分钟内到期!请在会话到期前更新数据”;
警报(信息);
}
我将警告消息的频率设置为每20分钟一次,并通过将其作为变量置于应用程序设置下使其易于更改,应用程序设置也可以在web.config中访问,并定义为键(SessionWarning),w/a值为20(代表20分钟)
以下是我在web.config文件中使用的代码:
我无法使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
);
});
从我的博客上试试这个:
- 会话设置为超时(例如30分钟)
- 会话超时时,用户将注销
- 显示倒计时,以便用户知道还剩多长时间
- 当用户接近极限时通知用户(例如,还剩5分钟)
- 让用户知道他们由于不活动而自动超时
$(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
);
});