当前位置: 首页 > 编程笔记 >

JS Ajax请求会话过期处理问题解决方法分析

陆文博
2023-03-14
本文向大家介绍JS Ajax请求会话过期处理问题解决方法分析,包括了JS Ajax请求会话过期处理问题解决方法分析的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了JS Ajax请求会话过期处理问题解决方法。分享给大家供大家参考,具体如下:

对于页面来说,处理session过期比较简单,一般只需在过滤器里面判断session用户是否存在,不存在则跳转页面到登陆页即可。

对于Ajax请求来说,这个办法则无效,只能获取到登录页的html代码。原因在于Ajax请求是XMLHTTPRequest对象发起的而不是浏览器,而服务器返回的信息接收者也是XMLHTTPRequest,非浏览器。

解决办法:

服务器端

可在返回的ResponseHeader里添加一个标识变量,以便在Javascript里处理。以Java为例,可在过滤器里进行如下处理:

try {
  // Ajax请求会话过期处理
  String requestType = request.getHeader("X-Requested-With");
  if (StringUtils.isNotEmpty(requestType) && requestType.equalsIgnoreCase("XMLHttpRequest")) {
    response.setHeader("SessionStatus", "sessionTimeOut");
    requestContext.abortWith(Response.status(401).build());
    return;
  }
  // 处理页面跳转
  requestContext.abortWith(Response.accepted().build());
  response.sendRedirect(loginPath);
} catch (IOException ex) {
  //do nothing
}

Javascript端

可通过JQuery的ajaxComplete方法进行处理,判断发送请求时是否会话已过期。

/**
 * ajax请求判断会话是否已过期
 */
$(document).ajaxError(function (event, jqXHR, options, errorMsg) {
  var sessionStatus = jqXHR.getResponseHeader('SessionStatus');
  if (sessionStatus && sessionStatus === 'sessionTimeOut') {
    alert("您的会话已过期,请重新登录");
    location.href = "login";
  }
});

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript中ajax操作技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

 类似资料:
  • 本文向大家介绍Nginx 连接tomcat时会话粘性问题分析及解决方法,包括了Nginx 连接tomcat时会话粘性问题分析及解决方法的使用技巧和注意事项,需要的朋友参考一下 在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接。使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端是CDN,或者说一个局域

  • 基础的 Servlet 接口定义了 service 方法用于处理客户端的请求。当有请求到达时,该方法由 servlet 容器路由到一个 servlet 实例来调用。 Web 应用的并发请求处理通常需要 Web 开发人员去设计适合多线程执行的Servlet,从而保证 service 方法能在一个特定时间点处理多线程并发执行。(译者注: Servlet 默认是线程不安全的,需要开发人员处理多线程问题)

  • 本文向大家介绍SQL Server评估期已过问题的解决方法,包括了SQL Server评估期已过问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 但是,当自己打开之前敲的系统时,总是报错,无法进行。经过检查发现,原来是自己的数据库出现了问题,无法连接到数据库了。打开Sql Server2008,总是报这样的错误提示:                      问题出现了,就得解决,于是开始上

  • 本文向大家介绍PHP http请求超时问题解决方案,包括了PHP http请求超时问题解决方案的使用技巧和注意事项,需要的朋友参考一下 一,http请求超时时间 可能出现的场景: 1,curl进程运行了一个世纪还木结束,curl的时候设置了超时时间 --connect-timeout 1000 2,operation timed out after 1000 milliseconds with 0

  • 问题内容: 我的webapp有登录的用户。有超时。在会话到期之前,我想执行一种方法来清除一些锁。 我已经实现了一个,但是一旦到达会话,会话就已经消失了,我需要从中获取一些数据,因此我想在会话实际过期之前执行一个方法(该会话需要运行并可以访问)。 我怎样才能做到这一点?有任何想法吗?这是我的会话监听器: 但我要去的原因是null或返回null 问题答案: 您可以通过实现HttpSessionBind

  • 本文向大家介绍spring cloud gateway请求跨域问题解决方案,包括了spring cloud gateway请求跨域问题解决方案的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了spring cloud gateway请求跨域问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 此处的spring-clou