Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.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
经典ASP JQuery AJAX不维护会话_Jquery_Ajax_Session_Asp Classic - Fatal编程技术网

经典ASP JQuery AJAX不维护会话

经典ASP JQuery AJAX不维护会话,jquery,ajax,session,asp-classic,Jquery,Ajax,Session,Asp Classic,我正在构建一个系统,使用JQuery和AJAX调用处理服务器内容的经典ASP页面 此系统要求用户登录。我正在使用会话存储用户名 问题是会话在默认的20分钟后超时,用户被重定向到登录页面。我假设由于某种原因,AJAX调用没有维护会话 我是这样做的: 当用户登录时,我将发布一个AJAX调用,如下所示: $.ajax({ type: "POST", url: "admin/ajax/signin.asp", data: { 'username': user

我正在构建一个系统,使用JQuery和AJAX调用处理服务器内容的经典ASP页面

此系统要求用户登录。我正在使用会话存储用户名

问题是会话在默认的20分钟后超时,用户被重定向到登录页面。我假设由于某种原因,AJAX调用没有维护会话

我是这样做的:

当用户登录时,我将发布一个AJAX调用,如下所示:

$.ajax({ 
    type: "POST", 
    url: "admin/ajax/signin.asp",
    data: { 
        'username': username,
        'userpassword': userpassword
    },
    cache: false,
    success: function(data, textStatus, jqXHR) {  
        if (jqXHR.getResponseHeader('REQUIRES_AUTH') === '1'){
            $('#failed').show();
        }
        else {
            location.href = "admin/"
        }
    }
});   
/* Check user logged in on every ajax request */
$('body').ajaxComplete(function(event,request,settings){
    if (request.getResponseHeader('REQUIRES_AUTH') === '1'){
        location.href="../signin.html"
    };
}); 
/* End */
If (trim(Session("userid")) = "") Then
    'No session so clear variable
    Session.Contents.Remove("userid")
    'Redirect to Login page
    Response.AddHeader "REQUIRES_AUTH", "1"
Else
    Session("userid") = Session("userid")  
End If
signin.asp根据数据库检查用户详细信息,如果确定,此页面将在会话变量中存储用户名

Session("userid") = Request("username")
用户现在已登录

当用户使用系统时,每个页面都会在每个AJAX请求上检查REQUIRES_AUTH标头,并按如下方式处理注销重定向:

$.ajax({ 
    type: "POST", 
    url: "admin/ajax/signin.asp",
    data: { 
        'username': username,
        'userpassword': userpassword
    },
    cache: false,
    success: function(data, textStatus, jqXHR) {  
        if (jqXHR.getResponseHeader('REQUIRES_AUTH') === '1'){
            $('#failed').show();
        }
        else {
            location.href = "admin/"
        }
    }
});   
/* Check user logged in on every ajax request */
$('body').ajaxComplete(function(event,request,settings){
    if (request.getResponseHeader('REQUIRES_AUTH') === '1'){
        location.href="../signin.html"
    };
}); 
/* End */
If (trim(Session("userid")) = "") Then
    'No session so clear variable
    Session.Contents.Remove("userid")
    'Redirect to Login page
    Response.AddHeader "REQUIRES_AUTH", "1"
Else
    Session("userid") = Session("userid")  
End If
使用AJAX post调用的每个ASP页面都会对会话进行检查,如果会话不存在,则会设置REQUIRES_AUTH标头,如下所示:

$.ajax({ 
    type: "POST", 
    url: "admin/ajax/signin.asp",
    data: { 
        'username': username,
        'userpassword': userpassword
    },
    cache: false,
    success: function(data, textStatus, jqXHR) {  
        if (jqXHR.getResponseHeader('REQUIRES_AUTH') === '1'){
            $('#failed').show();
        }
        else {
            location.href = "admin/"
        }
    }
});   
/* Check user logged in on every ajax request */
$('body').ajaxComplete(function(event,request,settings){
    if (request.getResponseHeader('REQUIRES_AUTH') === '1'){
        location.href="../signin.html"
    };
}); 
/* End */
If (trim(Session("userid")) = "") Then
    'No session so clear variable
    Session.Contents.Remove("userid")
    'Redirect to Login page
    Response.AddHeader "REQUIRES_AUTH", "1"
Else
    Session("userid") = Session("userid")  
End If

我假设使用Session(“userid”)=Session(“userid”),并且我正在调用一个在服务器上执行某些操作的ASP页面,这一事实足以维护会话,但似乎并非如此,所有建议都非常感谢。我有什么根本性的错误吗?

不幸的是,经典asp会话中没有滑动过期。我可以想出两个建议:

  • 使用cookie代替会话来标识用户。也许用户Id的散列将是合适的
  • 会话.Timeout
    值延长20分钟以上

  • 您可以在JavaScript中每隔15分钟设置一次自动刷新,并隐藏倒计时,或者在客户端站点JavaScript中传递一个唯一的令牌,而不是在else部分执行
    会话(“userid”)=会话(“userid”)
    ,为什么不将
    REQUIRES\u AUTH
    设置为0?您的外部页面和admin/ajax中的页面是同一应用程序的一部分,对吗?否则,您可能会使错误的会话保持活动状态。Admin/ajax只是主应用程序?@SearchAndResQ下的一个虚拟目录,因为我只检查REQUIRES_AUTH=1,如果需要,请用户登录。我不明白你的建议对解决会议无法维持的问题有什么帮助?请告知。@DonZacharias-我不知道你所说的申请是什么意思。admin/ajax/只是从ajax请求调用的经典asp页面的文件夹结构。仅供参考,在ajax和“维护”会话中,如果您运行的是单页应用程序,请每隔15分钟运行一次ajax脚本。如果您获取/发布它不会刷新您的令牌,则需要手动执行。设置脚本和asp文件,以持续刷新令牌。不要将ajax视为HTML页面