1. 程式人生 > >Session超時或無效,處理ajax請求

Session超時或無效,處理ajax請求

       專案使用的是spring-security安全框架,當session超時時,如果不是ajax請求,很簡單就能實現跳到指定的頁面。但是ajax請求就會有問題。session超時的時候,點選到ajax請求就會彈出一些頁面原始碼檔案。

       由於一直都在忙其他的這個問題一直放著。最近有時間了,就把這個問題給解決了。

       首先建了個攔截器,來判斷session超時。使用者登入後會儲存使用者資訊在一個session裡,在session的監聽裡,session超時會銷燬儲存在session裡的使用者資訊,而攔截器就通過session裡是否有使用者資訊來判斷session超時。此時需要注意登陸的時候將使用者資訊寫入session,超時需要在監聽器中將session銷燬(我總覺得這種方法不怎麼好。不知還有什麼更好的辦法。)

       攔截器是spring-mvc的攔截器,在攔截器裡判斷是不是ajax請求:

package org.nercita.bcp.system.util;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class CustomSessionHandlerInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception
            
    {
	//	System.out.println(LogInfoService.getLoginUserName());
	//	System.out.println(request.getSession().getAttribute("SPRING_SECURITY_CONTEXT"));
		if (request.getHeader("x-requested-with") != null
                    && request.getHeader("x-requested-with")
                    .equalsIgnoreCase("XMLHttpRequest")){//如果是ajax請求響應頭會有,x-requested-with;
            
			if (request.getSession().getAttribute("user") == null){//判斷session裡是否有使用者資訊
				
                            response.setHeader("sessionstatus", "timeout");//在響應頭設定session狀態
                            return false;
                         }
            
                }
                return true;
    }

	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {     
		
	}

	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		
	}

}



       這樣,如果session超時,而且是ajax請求,就會在響應頭裡,sessionstatus有一個timeout;再用一個全域性的方法來處理,session超時要跳轉的頁面。

jquery 可以用$.ajaxSetup 方法,ext也有類似的方法

 //全域性的ajax訪問,處理ajax清求時sesion超時
 $.ajaxSetup({ 
     contentType:"application/x-www-form-urlencoded;charset=utf-8", 
     complete:function(XMLHttpRequest,textStatus){ 
             var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); //通過XMLHttpRequest取得響應頭,sessionstatus,
             if(sessionstatus=="timeout"){ 
                         //如果超時就處理 ,指定要跳轉的頁面
                         window.location.replace("${ctx}/login.jsp"); 
             } 
               
     } 
  });

相關推薦

Session超時無效處理ajax請求

       專案使用的是spring-security安全框架,當session超時時,如果不是ajax請求,很簡單就能實現跳到指定的頁面。但是ajax請求就會有問題。session超時的時候,點選到ajax請求就會彈出一些頁面原始碼檔案。        由於一直都在忙

Hybrid架構下載入本地H5資源後如何處理Ajax請求

希望在app中開啟H5頁面能達到Native那樣的速度,當然感覺不太可能,但兩者速度越接近越好。 網上查了資料,有種方法是將網頁資源嵌入到app中,開啟時相當於載入本地資源。 參考:阿里巴巴(中國站)使用者體驗設計部部落格 裡面有段是這麼描述的: 別忘了,我們是 Hybrid App,還可以充分利用 Nat

springmvc框架使用ajax 請求資料返回資料中文亂碼處理

問題:ajax 傳送請求得到的資料中包含中文顯示????亂碼原因:SpringMVC框架的 @RequestBody 和 @ResponseBody兩個註解,分別完成請求物件到物件響應的過程,一步到位,但是因為Spring3.x以後有了HttpMessageConverter

session_write_close() PHP在訪問Session資料時存在互斥情況導致Ajax請求響應緩慢

概要:PHP在訪問Session資料時存在互斥情況,導致Ajax請求響應緩慢。 一,問題分析: 最近在統計網站請求響應時間時,發現有很多請求時間超過0.5秒,login/info最為明顯。 經過分析,login/info本身操作並不複雜,讀取Session中的資料,查詢一次

spring註解@ResponseBody處理ajax請求json資料型別

           最近做了一個spring+ajax 二級級聯選單,總是報各種錯誤,最後經過分析總結終於解決此問題,現在把問題展示給大家,以供分享。如有問題可以評論,肯定支援。 json需要引用的JSON包有:jackson-core-asl-1.9.13.jar,ja

PHP處理Ajax請求Ajax跨域

通過 匹配 格式 als 表示 內容 求和 serve -o PHP判斷是否為Ajax請求 我們知道,在發送ajax請求的時候,可以通過XMLHttpRequest這個對象,創建自定義的header頭信息, 在jquery框架中,對於通過它的$.ajax, $.get, 或

axios設定請求無效採用axios請求攔截實現

在專案實踐中,使用axios設定請求頭headers,結果在請求過程中請求頭中並沒有包含headers中設定的請求頭資訊,而且後臺也沒有接收到前臺設定的請求頭資訊,導致資料無法進行校驗,請求失敗 POST請求方式: axios .post(httpUrl, params, {

Django在同一個檢視中要處理ajax請求遇到的一些坑

在寫專案中遇到的一些ajax的坑,在這裡做一下記錄 一、先放一個完整的前,後端示例 $("#bTinvite").click(function(){ inviTtemail = $("#invitefriends").val(); // a

SpringMVC在處理Ajax請求後返回void導致前臺Ajax回撥函式不執行

問題簡述 在一次SpringMVC專案中,前臺通過Ajax請求,準備修改資料庫中的資料。因為Ajax請求只是讓後臺更改資料,所以Controller方法根本不需要返回給前臺任何資料,所以我們將Controller的方法的返回值設定為void。但令我困擾的是,前端頁面本應該執行的回撥函式一直不

使用jquery Ajax的post方法直接使用jqery ajax請求action 得到返回的json資料

                在初步掌握了java物件和json的相互轉化之後,今天要學習的就是如何使用ajax來請求action  並且放回json字元,在前臺對json資料進行解析。 第一步:使用ajax 的post直接提交,寫一個Post.jsp檔案 <%@

給button繫結click事件時出現ajax請求一次點選兩次提交的問題解決

$(function(){ $('#jsStayBtn').off().on('click', function(){ $.ajax({ cache: false, type: "POST",

省市區聯動ajax請求

<script language="javascript"> address(); function address() { var osheng = document.getElementById("osheng"); // var o

Mock.js生成隨機資料攔截 Ajax 請求讓前端獨立於後端進行開發

- 什麼是Mockjs   Mockjs是個能夠攔截頁面ajax請求並模擬返回資料的小工具,藉助Mockjs,前端開發中在後臺測試介面還沒有給的時候就可以自己攔截請求模擬資料進行愉快的開發了,所

JSP中在提交表單之前傳送ajax請求進行js的驗證

JSP中的程式碼: <script type="text/javascript"> // 校驗Phone number是否有效 function checkPhoneNumber() { // 定義ajax變數xmlhttp var xm

如何ASP.NET Core Razor中處理Ajax請求

在ASP.NET Core Razor(以下簡稱Razor)剛出來的時候,看了一下官方的文件,一

Spring mvc 處理ajax請求

1.在頁面上最好不要用submit觸發ajax,因為這樣會很容易出問題,今天學習的時候就遇到了觸發不了ajax的問題。所以最好用button來觸發。 2.若想利用ajax提交form表單,則可以在ajax的data屬性中提供form表單的序列化,如: d

MyEclipse整合SSM框架(四):整合前端頁面通過ajax請求獲得資料

Spring+SpringMVC+Mybatis 框架已經搭建完成,其中包括:(1)maven工程的搭建 (2)框架所需要的配置檔案的配置 (3)Mybatis 建立逆向工程連結資料庫。相應的配置檔案參見前幾篇部落格。此篇整理前端頁面傳送ajax 請求到後端,後端通過 Myb

Extjs6關於Ajax和form表單提交以及store請求session超時處理方法

對於Store的處理 每個store配置的時候,配上load監聽,載入時處理: usrStore : { model : 'App.model.Usr', autoLoad :

mvc下ajax請求遇到session超時簡單處理方式

(第一次寫部落格,有點糙,大家湊合著看吧 ==) 這兩天開發遇到有一個問題,ajax請求遇到session超時只返回登陸頁的html,我原來的頁面跳轉程式碼是這樣的: /// <summary> /// 重寫基類在Action執行

Ajax請求session失效統一處理跳轉到登陸頁

在登陸也上做一個標記比如 <meta name="sp" content="shanzhubuchiwandoujie"> 當ajax成功返回的data是登陸頁面,也就是包含以上資訊,就去登陸頁。 需要做的是重寫jquery的ajax方法,在所有的ajax請求