1. 程式人生 > >關於Session生命週期和使用HttpSessionListener中遇到的問題

關於Session生命週期和使用HttpSessionListener中遇到的問題

    繼續重複昨天的內容,昨天提到 Session 其建立並不是當我們客戶端訪問伺服器時就產生的,而是我們在如Servlet類中有類似HttpServletRequest.getSession()時才會建立。而其結束時間更不是我們關閉客戶端時產生。注:我們關閉客戶端只是使客戶端記憶體中的Session cookie失效,而不是伺服器端的Session物件失效。其失效時間是我們在如使用Tomcat等時的配置,或者程式中顯示呼叫invalidate()使其失效。

   關於其建立時期我們都沒有太大的問題,可是關於其失效時間今天簡直是把我鬱悶慘了。

   今天做簡單的類似晚上購物系統,其基本功能是實現登入、註冊、商品顯示、使用者選擇並把商品加入購物車。

   問題就出在對購物車資訊的儲存,當時我們同學提出了很多解決方案,現在想起來其實當時提出的儲存在Cookie實現其實是最可行和簡單的。我們後來使用的方案是為了解決客戶換瀏覽器或者機子登入時由於Cookie丟失造成客戶購物車資訊丟失的問題,我們的思路是在使用者登入會話過程中,我們知道Session物件作用域是整個會話過程,我們把所有購物車資訊儲存在Session物件中,然後存入資料庫。當時考慮我們不在使用者每次點加入購物車時向資料庫新增資料,這樣會加大資料庫負擔。而我們今天正好學了Serlet事件監聽器,所以資料向資料庫寫入的時機就是該次對話結束時觸發sessionDestroyed(HttpSessionEvent arg0)時寫入資料庫。

   問題來了,等我辛辛苦苦把相關方法實現之後。跑起伺服器測試之後鬱悶了,因為Session物件失效時間的不可控(相對,雖然可以配置。)但是我們期望的效果是使用者關閉會話之後就能儲存資料,不然使用者突然關閉之後又訪問呢?這時因為資料未存,導致使用者登入後購物車為空。哎~~~~~~~~~~鬱悶中,明天問問老師怎麼解決了。