我有一个ColdFusion页面,用户可以打开模态并查看有关一行数据的更多信息。但是,如果用户在页面上的时间超过默认的20分钟会话超时,则会抛出错误,因为它正在查找会话变量但无法找到它们。我理解如何使用服务器端代码捕获这个,但我似乎无法通过AJAX调用来成功确定会话是否仍然存在。
这是当用户点击按钮打开模态时触发的AJAX代码。基本上它正在检查会话是否与CFC中的函数一起存在。我的问题是它总是返回'有效'。
//this checks if the session is expired
function checkSessionExists() {
$.ajax({
//this is the that has function
url: 'components/Admin.cfc',
//POST method is used
type: "POST",
//pass the data
data: {
method: "checkSessionExists"
},
async: false,
success: function(response) {
//$('#loading').hide();
var obj = $.trim(response);
if (obj == 'expired') { //it's never expired
alert('Sorry, your session has expired.')
window.location.href = "logout.cfm";
return false;
}
else{
}
},
error: function(jqXHR, exception) {
alert('Uncaught Error.\n' + jqXHR.responseText);
}
});
return false;
}
这是CFC中的功能:
<cffunction name="checkSessionExists" access="remote" output="false" returntype="string" returnformat="plain" hint="I check if session is expired.">
<cfif NOT structKeyExists(session, "alive")>
<cfreturn "expired" />
<cfelse>
<cfreturn "valid" />
</cfif>
</cffunction>
我在想当我向CFC询问会话是否存在时,它仍然有会话变量,因为页面在20多分钟内没有刷新。所以...想知道如何向CFC发送AJAX请求并在CFC中有一个功能重新评估会话变量。任何帮助将不胜感激!
答案 0 :(得分:4)
我将依赖于您如何设置session.alive值。请记住,只要会话中存在alive,您的代码就会返回'valid'。如果在会话初始化代码中设置了session.valid,那么您将获得您所看到的响应。
对.cfm的任何请求都会导致会话超时值重置为now()+会话持续时间。我过去曾用过这个:
然后循环重复。这意味着,如果您的用户正在与该网站进行交互,那么他们的会话将保持打开状态,并且在他们正在进行的操作结束时不会被抛弃。如果您的业务/站点会话策略允许,这可能是一个非常好的设置。