關於session超時問題,不是普通的超時問題請高手務必進來看看

首先,我知道如果問session超時的問題,相信大家會對這個問題不屑一顧,所以加上了一個說明,呵呵。。。
爲什麼我會說這不是一個普通的超時問題呢,其實我也不太清楚,這是我在生產環境中發現的,大至情況我在這裏詳細描述一下

對於一般的WEB應用,我們通常都會通過session來保存操作者的一些相應信息,但爲了安全起見,又不能讓這個操作者在不退出系統的情況下面該登錄一直有效,所以我們一般都會設置如果該操作者一個小時沒操作,session就超時,下次操作時必須重新登錄後才能操作。我在開發的時候也作了相關的超時處理,就是用過濾器來判斷,這也是最省事的判斷方式。在常規情況下面,這種方式都能正常實現。現在我就把我遇到情況寫出來了,請大家注意,現在我是操作者,我的session超時了,但我發現本次提交卻成功了,提交完以後跳到登錄頁面去了,但我一查寫入數據庫中的信息,發現是別人的登錄信息,其它從操作頁面獲取的數據都是我提交的,唯獨從session中取的數據是別人登錄的,很慘很慘,後果很嚴重啊

這是什麼原因引起的呢,我想了很久也想不出一個所以然出來,後來我在想,是不是因爲我這個session剛好失效,在這同一時間,另一個用戶登錄,同時這個登錄生成的session id 與我上次登錄後失效的session id 剛好相同引起的呢?會不會存在這種可能性呢
如果是,我該怎麼解決呢,如果不是,那這種情況產生的原因又是什麼呢?期待有解決經驗的高手拔刀相助。

我再來說一下我的session 應用過程,過程非常普通,也就是用戶登錄,通過request.getSession.setAttribute("admin")生成session,用戶每次操作時都先經過filter判斷該session有沒有值,如果爲空則跳到登錄界面,如果有值則通過 request.getSession.getAttribute("admin")來獲取該用戶信息。
問題補充:
這是我filter的代碼
public void doFilter(ServletRequest srequest, ServletResponse sresponse,
FilterChain chain) throws IOException, ServletException {

HttpServletRequest httprequest = (HttpServletRequest) srequest;
HttpSession session = httprequest.getSession();
try {
ShopAdmin shopAdmin = (ShopAdmin) session.getAttribute("shopAdmin");
if (shopAdmin != null) {

chain.doFilter(srequest, sresponse);
}
else {
HttpServletResponse httpresponse = (HttpServletResponse) sresponse;
httpresponse.sendRedirect("/");
}
} catch (IOException e) {
e.printStackTrace();
} catch (ServletException e) {
e.printStackTrace();
}
}
用戶提交處理的代理就是一個action,在action中獲取session,並傳遞這個值去logic中做相應的處理,這個代碼相信應該是沒有問題的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章