詳情參考:http://blog.csdn.net/zuxianghuang/article/details/7270489 需注意,此類解決辦法有一定的局限,,最好要求,,頁面是一個整體,頁面可以共享,那么只需要一個全局的定義就可以了,。同時可以在response的里面寫入狀態(tài)如403,,ajax的error回調(diào)能識別到. 首先建了個攔截器,來判斷session超時,。用戶登錄后會保存用戶信息在一個session里,,在session的監(jiān)聽里,session超時會銷毀保存在session里的用戶信息,,而攔截器就通過session里是否有用戶信息來判斷session超時,。(我總覺得這種方法不怎么好。不知還有什么更好的辦法,。) 攔截器是spring-mvc的攔截器,,在攔截器里判斷是不是ajax請求: - public boolean preHandle(HttpServletRequest request,
- HttpServletResponse response, Object handler) throws Exception
- {
- if (request.getSession().getAttribute("user") == null)
- {
- if (request.getHeader("x-requested-with") != null
- && request.getHeader("x-requested-with")
- .equalsIgnoreCase("XMLHttpRequest"))
- {
- response.setHeader("sessionstatus", "timeout");
- return false;
- }
-
- }
- return true;
- }
這樣,,如果session超時,而且是ajax請求,,就會在響應(yīng)頭里,,sessionstatus有一個timeout;
再用一個全局的方法來處理,,session超時要跳轉(zhuǎn)的頁面,。 jquery 可以用$.ajaxSetup 方法,ext也有類似的方法 -
- $.ajaxSetup({
- contentType:"application/x-www-form-urlencoded;charset=utf-8",
- complete:function(XMLHttpRequest,textStatus){
- var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus");
- if(sessionstatus=="timeout"){
-
- window.location.replace("${path}/common/login.do");
- }
- }
- }
- });
|