我有一个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中有一个功能重新评估会话变量.任何帮助将不胜感激!
解决方法
我将依赖于你如何设置你的session.alive值.请记住,只要会话中存在alive,您的代码就会返回’valid’.如果在会话初始化代码中设置了session.valid,那么您将获得您所看到的响应.
对.cfm的任何请求都将导致会话超时值重置为now()会话持续时间.我过去用过这个:
>侦听页面上的键盘或单击事件.如果发生任何此类事件,请设置布尔标志
>每隔几分钟,检查一次值并发送一个ajax调用,以便在值为true时使会话保持活动状态.然后,将变量设置为false
然后循环重复.这意味着,如果您的用户正在与该网站进行交互,他们的会话将保持打开状态,并且在他们正在进行的操作结束时不会被抛弃.如果您的业务/站点会话策略允许,这可能是一个非常好的设置.