Express專案中ajax請求session過期問題處理
Express專案中ajax請求session過期問題處理
在頁面中使用ajax方式非同步請求返回自定義code資訊是我們在開發中經常用到的,但是如果ajax請求後需要走攔截器判斷使用者登入身份是否失效呢?
正常的url請求我們可以在Express專案的app.user()中進行攔截,攔截成功後直接寫url的重定向,但是ajax請求我們就不能這樣寫了。
如下:直接判斷session,然後res.redirect即可。
app.use(function (req, res, next) { if (!req.session.user) { if (req.url == "/login") { next(); } else { res.redirect('/login'); } } else if (req.session.user) { res.locals.session = req.session; next(); } });
但是ajax請求就不行了,因為我們現在基本都是些type:json,那麼現有的app.use就不能實現提示效果了,我們可以進行改造,增加ajax請求判斷,我們都知道ajax請求的x-requested-with=XMLHttpRequest,所以就可以改造如下:
app.use(function (req, res, next) { if (!req.session.user) { //處理 ajax 請求 session 過期問題 if (req.headers["x-requested-with"] != null && req.headers["x-requested-with"] == "XMLHttpRequest" && req.url != "/login") { return res.json({ret_code: 99, ret_msg: '登入資訊失效,請您重新登入'}); } if (req.url == "/login") { next(); } else { res.redirect('/login'); } } else if (req.session.user) { res.locals.session = req.session; next(); } });
增加判斷後,ajax返回json狀態碼,在我們頁面的ajax請求處理即可,那麼問題又來了,需要每個頁面的每個ajax方法去處理下?豈不是要瘋了?當然不是,這就要用到$.ajaxSetup方法了,程式碼如下:
/** * Created by pangshunlong on 2017/3/31. */ /** * 設定未來(全域性)的AJAX請求預設選項 * 主要設定了AJAX請求遇到Session過期的情況 */ $.ajaxSetup({ complete: function (data) { if (data.responseJSON.ret_code && data.responseJSON.ret_code == 99) { layer.msg(data.responseJSON.ret_msg, {icon: 5}); var top = getTopWinow(); setTimeout('top.location.href = "/login";', 1500); } } }); /** * 在頁面中任何巢狀層次的視窗中獲取頂層視窗 * @return 當前頁面的頂層視窗物件 */ function getTopWinow() { var p = window; while (p != p.parent) { p = p.parent; } return p; }
都引用下這個js檔案即可實現所有頁面的ajax在session失效後的提示和跳轉登入頁面啦~
如果誰有更好的方法請賜教~
由龐順龍最後編輯於:3年前
內容均為作者獨立觀點,不代表八零IT人立場,如涉及侵權,請及時告知。
相關文章
- spring security:ajax請求的session超時處理SpringSession
- springmvc處理ajax請求SpringMVC
- options 請求跨域問題處理跨域
- 封裝springmvc處理ajax請求結果封裝SpringMVC
- ajax呼叫WebMethed返回處理請求時出錯Web
- .net webapi 處理前端請求跨域問題WebAPI前端跨域
- 關於在request請求時,處理請求引數的問題
- vue2.0 axios post請求傳參問題(ajax請求)VueiOS
- 關於非同步AJAX請求執行速度過快問題非同步
- vue-cli 搭建的專案處理不同環境下請求不同域名的問題Vue
- csrf解決Ajax請求跨站問題
- 解決.NET Core Ajax請求後臺傳送引數過大請求失敗問題
- js ajax請求封裝及解決node請求跨域問題JS封裝跨域
- 專案管理中,如何處理人力資源問題?專案管理
- 記錄Ajax請求報415與404問題
- ajax請求
- SpringMVC原始碼分析:POST請求中的檔案處理SpringMVC原始碼
- ajax請求下載excel檔案Excel
- 前後端處理流檔案請求後端
- SpringMVC請求處理過程原始碼簡析SpringMVC原始碼
- zookeeper原始碼 — 五、處理寫請求過程原始碼
- 【Tomcat】Tomat 處理請求的過程(圖解)Tomcat圖解
- fastHttp服務端處理請求的過程ASTHTTP服務端
- ajax請求 juery
- 請求資料處理
- ajax中POST請求與引數(請求體)設定
- ajax中設定請求頭和自定義請求頭
- 解決ajax請求引數過多導致引數被截斷的問題
- axios中POST請求變成OPTIONS處理iOS
- Angular專案簡單使用攔截器 httpClient 請求響應處理AngularHTTPclient
- Spring MVC檔案請求處理詳解:MultipartResolverSpringMVC
- React如何解決fetch跨域請求時session失效問題React跨域Session
- nginx 處理客戶端請求的完整過程Nginx客戶端
- 大請求、請求超時問題
- DeferredResult——非同步請求處理非同步
- 原生ajax請求&JSONPJSON
- Tomcat中的容器是如何處理請求的Tomcat
- Node中POST請求的正確處理方式