使用AJAX时检查会话超时

我有一个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分钟内未刷新。 所以...想知道如何将一个AJAX请求发送给CFC并在CFC中有一个函数重新评估会话变量。 任何帮助,将不胜感激谢谢!


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

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

  • 在页面上监听键控或点击事件。 如果发生此类事件,请设置布尔标志
  • 每隔几分钟检查一次,如果值为true,则发送ajax调用以使会话保持活动状态。 然后您将该变量设置为false
  • 然后循环重复。 这意味着如果您的用户正在与网站互动,他们的会话将保持开放,并且在他们正在做的事情结束时不会被抛出。 如果您的企业/网站会话政策允许,这可以是一个非常好的设置。

    链接地址: http://www.djcxy.com/p/77301.html

    上一篇: checking session timeout when using AJAX

    下一篇: node.js