使用AJAX时检查会话超时

use*_*633 7 ajax coldfusion session jquery

我有一个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;
}
Run Code Online (Sandbox Code Playgroud)

这是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>
Run Code Online (Sandbox Code Playgroud)

我想当我问CFC会话是否存在时,它仍然有会话变量,因为页面在20多分钟内没有刷新.所以...想知道如何向CFC发送AJAX请求并在CFC中有一个功能重新评估会话变量.任何帮助将不胜感激!

bar*_*nyr 4

我将取决于您如何设置 session.alive 值。请记住,只要会话中存在活动,您的代码就会返回“有效”。如果在会话初始化代码中设置了 session.valid,您将得到您所看到的响应。

对 .cfm 的任何请求都会导致会话超时值重置为 now()+会话持续时间。我过去用过这个:

  1. 监听页面上的按键或单击事件。如果发生任何此类事件,请设置一个布尔标志
  2. 每隔几分钟检查一次该值,如果该值为 true,则发送 ajax 调用以保持会话处于活动状态。然后将变量设置回 false

然后循环重复。这意味着,如果您的用户正在与网站进行交互,他们的会话将保持打开状态,并且他们不会在所做的事情结束时被抛弃。如果您的业务/站点会话策略允许,这可能是一个非常好的设置。