【问题标题】:Classic ASP JQuery AJAX not maintaining session经典 ASP JQuery AJAX 不维护会话
【发布时间】:2013-01-06 20:31:49
【问题描述】:

我正在构建一个系统,使用 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 页面这一事实足以维持会话,但它似乎不是,非常感谢所有建议。我有什么根本错误吗?

【问题讨论】:

  • 而不是在else部分做Session("userid") = Session("userid"),为什么不把REQUIRES_AUTH设置为0呢?
  • 您的外部页面和 admin/ajax 中的外部页面是同一个应用程序的一部分,对吗?否则,您可能会保持错误的会话处于活动状态。 admin/ajax只是主应用下的一个虚拟目录?
  • @SearchAndResQ - 因为我只检查 REQUIRES_AUTH = 1 是否存在,然后要求用户登录。我不明白您的建议将如何帮助解决会话未维护的问题?请指教。
  • @DonZacharias - 我不确定你所说的应用程序是什么意思。 admin/ajax/ 只是从 ajax 请求调用的经典 asp 页面的文件夹结构。
  • fyi 关于 ajax 和“维护”会话,如果您正在运行单页应用程序,请运行一个 ajax 脚本以每隔一段时间(即每 15 分钟)间隔一次。如果您获取/发布它不会刷新您的令牌,则需要手动执行。设置一个脚本和一个将不断刷新您的令牌的 asp 文件。不要将 ajax 视为 HTML 页面

标签: jquery ajax session asp-classic


【解决方案1】:

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

  1. 使用 cookie 代替会话来识别用户。也许用户 ID 的哈希值会合适。
  2. Session.Timeout 值扩展为大于 20 分钟。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多