会话到期后,我的ajax调用返回文件未找到错误?

时间:2018-04-01 15:09:08

标签: jquery ajax coldfusion http-status-code-401 jqxhr

我为单页应用创建了登录系统。第一步旅馆登录过程是用户认证。一旦用户登录,他们的会话就会开始。我在服务器端设置了30分钟的会话时间。在客户端,我有JavaScript跟踪何时显示有关其会话时间的警告模式框。但是,只要计算机未处于睡眠模式或移动设备未锁定,这将正常工作。我使用其他方法通过设置JavaScript中每秒运行的间隔来跟踪这些活动,并检查用户上次活动时的差异并比较当前时间。如果差异大于30分钟,我会向他们显示链接以返回登录页面。一切正常,直到我在我的Android手机上打开浏览器并登录。之后我在手机上打开了一些其他应用程序并锁定手机并在30分钟后回来我没有看到我的JavaScript被触发显示用户链接登录页面。相反,我会在同一页面上,例如,如果我点击Submit按钮发送ajax通话我就会收到错误:File not found Components/Login.cfm

以下是我使用JQuery / Ajax和ColdFusion登录代码的示例:

ColdFusion组件文件:

<cfcomponent output="false">

    <cfset this.name = "jqlogin">

    <cfset this.sessionManagement = true>

    <!--- Run before the request is processed --->
    <cffunction name="onRequestStart" returnType="boolean" output="false">
        <cfargument name="thePage" type="string" required="true">
        <cfset var page = listLast(arguments.thePage,"/")>

        <cfif not listFindNoCase("Login.cfm,Auth.cfc",page)>      
            <cfif not structKeyExists(session, "loggedin") or session.loggedin is false>
                <cflocation url="Login.cfm" addToken="false">
            </cfif>
        </cfif>
        <cfreturn true>
    </cffunction>

    <!--- Runs when your session starts --->
    <cffunction name="onSessionStart" returnType="void" output="false">
        <cfset session.loggedin = false>
    </cffunction>
</cfcomponent>

这是提交表单的JQuery / Ajax代码:

function submitData(){
    var frmData = $('#myForm').serialize();
    $.ajax({
        type: 'POST',
        url: 'Components/AjaxFunctions.cfc?method=saveRecord',
        data: frmData,
        dataType: 'json'
    }).done(function(obj){
        //successfully submitted            
    }).fail(function(jqXHR, textStatus, errorThrown){
        alert("Error: "+errorThrown);
    });
}

我认为问题是一旦服务器会话超时访问任何其他文件,但Login.cfmAuth.cfc受到限制。因此,如果我尝试提交表单,JQuery Ajax调用将在Components文件夹中查找Login.cfm。我想知道如果Login.cfm不存在,我可以如何将用户踢回url:Components/AjaxFunction.cfc?另外我想提一下,一旦会话超时,这将发生在系统中的任何ajax调用。在屏幕上显示警告消息Error: Not found,如果我检查开发工具ajax响应,我会看到file not found Components/Login.cfm。如果有人知道这种情况的最佳解决方案,请告诉我。谢谢。

1 个答案:

答案 0 :(得分:2)

更改jQuery上的失败,重定向到“登录”页面。

 }).fail(function(jqXHR, textStatus, errorThrown){
        // This is like an HTTP redirect.
        window.location.replace("http(s)://[yourURL]/Login.cfm");  
        //alert("Error: "+errorThrown);
        // Log to console or something if you need to see the error.
    });