【发布时间】:2016-01-20 19:33:06
【问题描述】:
我使用 asp.net 来管理我网站的会话状态。我还使用 jquery 和 $.ajax(...) 进行同步和异步请求。
通常,在 asp.net 中,如果用户会话超时,可以通过全部或部分回发来检测。但是,假设由于我使用 jquery ajax 调用静态 c# web 方法而没有发生部分或全部回发。如果会话超时,最好知道什么?
【问题讨论】:
标签: c# jquery asp.net ajax session
我使用 asp.net 来管理我网站的会话状态。我还使用 jquery 和 $.ajax(...) 进行同步和异步请求。
通常,在 asp.net 中,如果用户会话超时,可以通过全部或部分回发来检测。但是,假设由于我使用 jquery ajax 调用静态 c# web 方法而没有发生部分或全部回发。如果会话超时,最好知道什么?
【问题讨论】:
标签: c# jquery asp.net ajax session
我会创建一个 javascript 间隔来不时发出 ajax 请求,如下所示:
<script>
$(document).ready(function () {
setInterval(function (){
$.ajax({
url: 'WebMethodhere',
type: 'GET',
success: function (result) {
if(result!='true')
{
//It means that the Session expired, so do somethig
}
}
})
},3000);
});
</script>
我在这个例子中使用了 3000 毫秒,但时间由你决定。
您的网络方法可能非常简单:
if(Session["WhateverSession"]==null)
{
return false;
}
else
{
return true;
}
【讨论】:
有几种方法可以实现它。
方法 #1:创建一个通用处理程序并实现 IReadOnlySessionState 接口以从该处理程序访问会话变量。使用 ajax 获取请求并访问此通用处理程序,该处理程序提供会话是否处于活动状态。
方法 #2:使用 [WebMethod] 装饰页面的公共方法(使用 System.Web.Services)并通过 ajax get 请求访问此方法,该请求提供会话是否处于活动状态。
但所有这些方法都应该仅用于检查会话是否处于活动状态或已过期。但如果会话处于活动状态,它将更新您的会话 - 这可能是不可取的。请也检查该选项。
【讨论】:
最简单的解决方案是每隔一段时间强制发回一个帖子。
<meta http-equiv="refresh" content="1800">
【讨论】: