经典ASP JQuery AJAX不维护会话

时间:2013-01-23 11:17:54

标签: jquery ajax session asp-classic

我正在构建一个使用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/"
        }
    }
});   

signin.asp会根据数据库检查用户详细信息,如果确定,则此页面将用户名存储在会话变量中。

Session("userid") = Request("username")

用户现已登录。

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

/* 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 */

使用AJAX帖子调用的每个ASP页面都会对会话进行检查,如果它没有,那么它会按如下方式设置REQUIRES_AUTH标头:

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页面的事实服务器将足以维持会话但似乎没有,所有建议非常感谢。我有什么根本性的错误吗?

2 个答案:

答案 0 :(得分:1)

您可以每隔15分钟在JavaScript中设置一次自动刷新,隐藏倒计时或在您的客户端网站中传递唯一令牌javascript

答案 1 :(得分:0)

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

  1. 使用Cookie代替会话来识别用户。也许用户ID的哈希值是合适的。
  2. 延长大于20分钟的Session.Timeout值。