Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 使用AJAX时检查会话超时_Jquery_Ajax_Session_Coldfusion - Fatal编程技术网

Jquery 使用AJAX时检查会话超时

Jquery 使用AJAX时检查会话超时,jquery,ajax,session,coldfusion,Jquery,Ajax,Session,Coldfusion,我有一个ColdFusion页面,用户可以打开一个模式并查看关于一行数据的更多信息。但是,如果用户在页面上的时间超过默认的20分钟会话超时,则会抛出一个错误,因为它正在查找会话变量,但找不到它们。我知道如何使用服务器端代码来解决这个问题,但我似乎无法通过AJAX调用成功确定会话是否仍然存在 下面是当用户点击按钮打开模型时触发的AJAX代码。基本上,它检查会话是否在CFC中存在。我的问题是,它总是返回“valid” //this checks if the session is expired f

我有一个ColdFusion页面,用户可以打开一个模式并查看关于一行数据的更多信息。但是,如果用户在页面上的时间超过默认的20分钟会话超时,则会抛出一个错误,因为它正在查找会话变量,但找不到它们。我知道如何使用服务器端代码来解决这个问题,但我似乎无法通过AJAX调用成功确定会话是否仍然存在

下面是当用户点击按钮打开模型时触发的AJAX代码。基本上,它检查会话是否在CFC中存在。我的问题是,它总是返回“valid”

//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值。请记住,只要会话中存在活动,代码就会返回“valid”。如果session.valid是在session init代码中设置的,那么您将得到所看到的响应

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

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

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

    +1你以10秒的优势击败了我;)(我将删除我的答案,因为我们基本上是在说同样的话)呵呵,对不起。如果没有Chrome StackTrack插件,我永远都不会及时回答任何我不得不做的事情。我使用了一个用户看不见的单像素iframe。里面是一个带有元刷新标签的coldfusion页面。请注意,这种方法意味着用户不必在浏览器上执行任何操作。这是故意的。这可能不适合你的情况,但适合我的情况。