如何处理AJAX请求中的会话超时

Joe*_*ips 14 php error-handling session jquery

我相信你们都熟悉使用AJAX的投票系统(嗯......看那边<----)

我有类似的东西,当你向上或向下投票时,它使用AJAX从votes.php请求新值.问题是我正在使用会话获取用户ID,因此一个人只能投票一次.如果他们在页面上坐了一个小时然后投票,那么会话不再存在会发生什么?处理这种情况的好方法是什么?我应该将他们的页面重定向到登录屏幕吗?如果是这样,我怎么能从AJAX请求引用的votes.php页面中做到这一点?我是否忽略了处理这种情况的好方法?任何意见将是有益的.

swi*_*ams 11

考虑返回401的http状态,以及详细说明原因的JSON对象.如果您正在使用jQuery,那么您将转到error()回调,然后您可以解析您的对象.

$.ajax({
  data: {},
  dataType: 'html',
  success: function(data) {
    // do whatever here
  },
  type: 'POST',
  url: 'myserver.com',
  error: function(XMLHttpRequest, textStatus, errorThrown) {
    // XMLHttpRequest.responseText has your json string
    // XMLHttpRequest.status has the 401 status code
    if (XMLHttpRequest.status === 401) {
      location.href = 'login.php';
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

我不再熟悉PHP,但这应该适用于任何环境.您可能必须禁止任何自动登录表单重定向.在asp.net mvc中,框架将看到401并返回默认登录表单,状态为200.