最近在公司做的项目一直测试和使用都很好,客户反响也很不错,但是,就在前两天,客户提出了一个bug,但是全队都愁眉不展,在今天做公交车的时候,我突然想到了一种可能,就是我们习以为常的ajax提交出了问题!
拦截器是spring-mvc的拦截器,在拦截器里判断是不是ajax请求:
<span style="font-size:18px;">1. public boolean preHandle(HttpServletRequest request,
2. HttpServletResponse response, Object handler) throws Exception
3. {
4. if (request.getSession().getAttribute("user") == null)//判断session里是否有用户信息
5. {
6. if (request.getHeader("x-requested-with") != null
7. && request.getHeader("x-requested-with")
8. .equalsIgnoreCase("XMLHttpRequest"))//如果是ajax请求响应头会有,x-requested-with;
9. {
10. response.setHeader("sessionstatus", "timeout");//在响应头设置session状态
11. return false;
12. }
13.
14. }
15. return true;
16. }
</span>
这样,如果session超时,而且是ajax请求,就会在响应头里,sessionstatus有一个timeout;
再用一个全局的方法来处理,session超时要跳转的页面。
jquery 可以用$.ajaxSetup 方法,ext也有类似的方法
<span style="font-size:18px;">1. //全局的ajax访问,处理ajax清求时sesion超时
2. $.ajaxSetup({
3. contentType:"application/x-www-form-urlencoded;charset=utf-8",
4. complete:function(XMLHttpRequest,textStatus){
5. var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); //通过XMLHttpRequest取得响应头,sessionstatus,
6. if(sessionstatus=="timeout"){
7. //如果超时就处理 ,指定要跳转的页面
8. window.location.replace("${path}/common/login.do");
9. }
10. }
11. }
12. });
</span>原文:http://blog.csdn.net/xvshu/article/details/43850339