1. 報表session與應用sessionjavascript
報表集成到項目中可能會有一個疑問就是系統應用和報表應用在一個web服務器下,那系統session和報表session是否是一個session呢?若是不是那會不會有衝突呢?java
是:不是同一個session也不會起衝突,由於應用的session存放的是request請求等一些共享信息,而報表session存放的是訪問報表的相關信息,如訪問的是否是同一個模板等,二者是徹底獨立,因此不會衝突。web
2. 報表開發工具FineReport中建立與關閉session機制瀏覽器
正常狀況下,當客戶端瀏覽器訪問報表服務器端的某張報表時,便會產生一個session會話,當用戶關閉瀏覽器的時候就會通知報表服務器關閉這個session,但不會使保存在服務器端的session對象消失,一樣也不會使已經保存到硬盤上的持久化cookie消失。服務器
若用戶的機器因爲某種緣由如非正常關機等等致使瀏覽器非正常關閉時,服務器沒有收到關閉這個session的信息,會一直保存這個沒必要要的session。爲了解決這個問題,咱們軟件中提供了這樣一種機制,瀏覽器每隔40秒向服務器發送一個「i am alive」信息,若報表服務器一分鐘沒有收到這個信息便會自動關閉這個session。當瀏覽器遇到非正常中止時,便不會發送「i am alive」信息,相應的session不會在一分鐘之內被關閉。cookie
3. session基本概念session
session機制自己並不複雜,然而其實現和配置上的靈活性卻使得具體狀況複雜多變。這也要求咱們不能把僅僅某一次的經驗或者某一個瀏覽器,服務器的經驗看成廣泛適用的經驗,而是始終須要具體狀況具體分析。工具
通俗的說:客戶端瀏覽器訪問某個地址,發送了一個請求,就產生一個session會話,如今的瀏覽器均可以打開多個tab窗口,打開的都屬於一個session,當該瀏覽器關閉的時候session就關閉了。若不關閉該瀏覽器,再次打開一個瀏覽器,會從新建立一個session。開發工具
3.1 session在什麼時候被建立spa
一個常見的誤解是覺得session在有客戶端訪問時就被建立,然而事實是直到某server端程序調用HttpServletRequest.getSession(true)這樣的語句時才被建立,注意若是JSP沒有顯示的使用<%@page session="false"%>關閉session,則JSP文件在編譯成Servlet時將會自動加上這樣一條語句HttpSession session = HttpServletRequest.getSession(true),這也是JSP中隱含的session對象的來歷。
因爲session會消耗內存資源,所以,若是不打算使用session,應該在全部的JSP中關閉它。
3.2 session什麼時候被刪除
綜合前面的討論,session在下列狀況下被刪除:
a、程序調用HttpSession.invalidate() b、距離上一次收到客戶端發送的session id時間間隔超過了session的最大有效時間 c、服務器進程被中止
3.3 如何作到在瀏覽器關閉時刪除session
嚴格的講,作不到這一點。能夠作一點努力的辦法是在全部的客戶端頁面裏使用javascript代碼window.oncolose來監視瀏覽器的關閉動做,而後向服務器發送一個請求來刪除session。可是對於瀏覽器崩潰或者強行殺死進程這些很是規手段仍然無能爲力。