我正在使用 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 页面这一事实足以维持会话,但似乎并非如此,所有建议非常感激。我有什么根本错误吗?