工作問題解決:ajax的妙用

應客戶要求,對現有的項目進行升級改造。

問題是,同一個賬號密碼可以同時在多處登錄。領導給了一週時間。

剛接手項目不久,是個老項目,分佈式的。

先是熟悉了整個登錄和退出的流程,將代碼執行的過程大致捋順。

本以爲是個很簡單的問題,通過sessionid唯一性解決。但是問題並沒有想得那麼簡單。項目中封裝了request,導致即使是同一個用戶,多次登錄的session都不被共享。即同一用戶,多處登錄,會有多個不同的且唯一的sessionid。所以,通過比較session中保存的上次登錄的sessionid這次登錄的sessionid比較的方案,不可行。(有點懷疑這個同一用戶可以多處登錄其實是故意而爲的,因爲項目功能的特殊性。但是時間緊張,加之本人對項目不熟悉,就先按領導要求的來吧)

權衡再三,因爲頁面請求不太頻繁,而且項目中沒有使用緩存架構,而且正好數據庫中專門有一張登錄記錄表,於是,權宜之計,就暫且將sessionid放在了數據庫的登錄記錄中。(權宜之計

同一用戶多處登錄的問題,已根據sessionid不同,而成功攔截。

--------接下來是講ajax的妙用---------------------------------------------------------------------------------------

簡單描述下效果:小明在A處剛剛登錄了成功用戶wangwang,有一個sessionid值,被記錄進數據庫;緊接着,小花就在B處也登錄成功了用戶wangwang,有一個sessionid值,被記錄進數據庫,將小明的sessionid替換,這時,當小明再點擊頁面按鈕,向服務端發起請求時,就會判斷小明的sessionid和數據庫中記錄的sessionid是否一致,如果不一致,則小明將會被迫強制下線。(看到的效果:先是跳轉到了一個錯誤頁面,提示“用戶已在別處登錄,5秒後跳轉到登錄頁面”。倒計時5秒後,跳轉到了登錄頁面,用戶決定是否重新登錄)。

問題是,這個項目是一個分佈式的項目,請求地址可能是 (IP:AABB),可能是 (IP:CCDD),可能是(IP:ABCD),他們各自有自己的登錄頁面,所以當被迫下線時,要跳轉到各自的登錄頁面,這個也好解決。問題是,不是每個都有自己的登錄頁面,當沒有登錄頁面時,頁面會顯示404,非常的不友好。所以需要考慮,如何才能讓有登錄頁面的顯示自己的登錄頁面,沒有登錄頁面的都跳轉到一個公共的登錄頁面?

通過後臺的代碼可以解決。但考慮到自己本身對這個項目不太熟悉,盲目改動太多,可能會對項目造成潛在的問題,所以想着將改動降到最小,只在前端解決,這樣後期對項目熟悉了,說不定會有更優雅的解決。

突然想到,訪問成功的返回狀態碼是200,訪問不到的返回狀態碼是400。而使用ajax,可以返回請求地址的狀態碼status。

所以問題解決:在跳轉到錯誤頁面時,就先調用ajax(爲什麼要先調用ajax?異步),向要跳轉的地址發起請求,在根據返回狀態碼判斷,如果爲200,則正常頁面跳轉,即可跳往各自的登錄頁面;如果不爲200,統統跳轉到通用的登錄頁面。問題巧妙解決。

寫在最後:不停思考,忽然得之。相互分享,共同進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章