经典ASP JQuery AJAX不维护会话
我正在构建一个系统,使用JQuery和AJAX调用处理服务器内容的经典ASP页面 此系统要求用户登录。我正在使用会话存储用户名 问题是会话在默认的20分钟后超时,用户被重定向到登录页面。我假设由于某种原因,AJAX调用没有维护会话 我是这样做的: 当用户登录时,我将发布一个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
$.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会话中没有滑动过期。我可以想出两个建议:
会话.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页面