HTTP 階段作業問題
建立或使用「超文字傳送通訊協定 (HTTP)」階段作業時,請使用問題的疑難排解資訊。
如果要檢視及更新這裡所討論的階段作業管理程式設定,請使用管理主控台。 選取管理問題應用程式的應用程式伺服器,然後在「其他內容」之下,選取 Web 儲存器,再選取 階段作業管理程式。
- 如需除錯階段作業管理程式相關問題的一般步驟,請檢閱 HTTP 階段作業管理程式疑難排解提示 。
- 請檢閱 配置 HTTP 階段作業 ,以取得如何配置階段作業管理程式的相關資訊,以及使用它的最佳作法。
- 查看 可用的線上支援 (提示與要訣、TechNotes 及修正程式),以查看是否已識別並記載問題。
- 如果您在那裡找不到列出的問題 請聯絡 IBM 支援中心。
HTTP 階段作業未建立,或在要求之間遺失
- 確定已在「階段作業追蹤機制」內容下勾選 啟用 Cookie 勾選框。
- 請確定在您從中進行測試的瀏覽器上已啟用 Cookie ,或您的使用者從中存取應用程式的瀏覽器已啟用 Cookie。
- 檢查 SessionManager 上指定的 Cookie 網域 (如果要檢視或更新 Cookie 設定,請在 中,按一下 修改)。
- 例如,如果 Cookie 網域設為
.myCom.com
,則應該使用該網域名稱來存取資源。 範例: http://www.myCom.com/myapp/servlet/sessionservlet。 - 如果已設定網域內容,請確定它以點 (.) 開頭。 如果網域名稱不是以點開頭,則某些 Netscape 版本不接受 Cookie。 Internet Explorer 允許使用具有或沒有點的網域。 例如,如果網域名稱設為 mycom.com,請將它變更為 。mycom.com ,以便 Netscape 和 Internet Explorer 都允許使用 Cookie。附註: 當伺服器位於不同的主機時,請配置前端路由器 (例如具有外掛程式的 Web 伺服器) 或設定 Cookie 網域,以確保階段作業 Cookie 流向所有伺服器。
- 例如,如果 Cookie 網域設為
- 請檢查 SessionManager上指定的 Cookie 路徑。 請檢查問題 URL 是否在指定的 Cookie 路徑下階層式。 如果不正確,則為 Cookie 路徑。
- 如果設定 Cookie 經歷時間上限內容,請確定用戶端 (瀏覽器) 機器的日期和時間與伺服器的日期和時間相同 (包括時區)。 如果用戶端與伺服器的時間差異超過
Cookie 經歷時間上限
,則每次存取都會是新的階段作業,因為 Cookie 在存取之後到期。 - 如果您在企業應用程式內有多個追蹤階段作業的 Web 模組:
- 如果您想要在企業應用程式中的 Web 模組之間有不同的階段作業設定,請確定每一個 Web 模組指定不同的 Cookie 名稱或路徑,或
- 如果企業應用程式內的 Web 模組使用一般 Cookie 名稱和路徑,請確定所有 Web 模組的 HTTP 階段作業設定 (例如
Cookie 經歷時間上限
) 都相同。 否則, Cookie 行為無法預期,視建立階段作業的應用程式而定。 請注意,這不會影響 Web 模組個別維護的階段作業資料。
- 檢查瀏覽器與伺服器之間的 Cookie 流程:
- 在瀏覽器上,啟用
Cookie 提示
。 請按一下 Servlet ,並確定已提示 Cookie。 在伺服器上啟用 SessionManager 追蹤。 使用追蹤規格
com.ibm.ws.session. * = all=enabled
來啟用 HTTP 階段作業管理程式元件的追蹤。 啟用追蹤之後,請使用 Servlet 或 JSP 來練習階段作業,然後遵循指示來傾出及瀏覽追蹤輸出。- 從瀏覽器存取階段作業 Servlet。
- 瀏覽器會提示輸入 Cookie; 請注意 jsessionid。
- 重新載入 Servlet ,如果傳送新的 Cookie ,請記下 Cookie。
- 請檢查階段作業追蹤,並尋找階段作業 ID ,然後追蹤執行緒的要求。 驗證階段作業在 Web 要求之間是否穩定:
- 尋找啟動階段作業要求的 getIHttpsession(...)。
- 尋找 Servlet 要求結束的 releaseSession(..)。
- 在瀏覽器上,啟用
- 如果您使用 URL 重新編寫,而不是 Cookie:
- 請確定應用程式的導覽路徑上沒有靜態 HTML 頁面。
請確定 Servlet 和 JSP 檔正確實作 URL 重新編寫。 如需詳細資料和範例,請參閱 階段作業追蹤選項。
- 已淘汰特性: WebSphere Application Server 7.0版中已淘汰使用 SSL ID 的階段作業追蹤。 您可以配置階段作業追蹤來使用 Cookie ,或修改應用程式來使用 URL 重新編寫。如果您使用 SSL 作為階段作業追蹤機制:
- 請確定您已在 IBM HTTP Server 或 iPlanet HTTP 伺服器上啟用 SSL。
檢閱 階段作業追蹤選項。
- 如果您是在叢集 (多節點) 環境中,請確定您已啟用階段作業持續性。
HTTP 階段作業不是持續性
- 請檢查資料來源。
- 請檢查階段作業管理程式的持續性設定內容:
- 如果您想要利用階段作業持續性,請驗證「持續性」已設為 資料庫。
持續性也可以設為 記憶體至記憶體抄寫。
- 如果您使用 資料庫型 persistence:
- 請檢查在 SessionManager上正確指定資料來源的 JNDI 名稱。
- 請指定正確的使用者 ID 和密碼來存取資料庫。
請注意,必須在管理主控台中根據現有資料來源的內容來檢查這些設定。 階段作業管理程式不會自動為您建立階段作業資料庫。
- 資料來源應該是非 JTA ,例如啟用非 XA。
請檢查 JVM 日誌 ,以取得適當的資料庫錯誤訊息。
請檢查日誌,以取得適當的資料庫錯誤訊息。
- 使用 DB2®,對於非 4k 的列大小,請確定指定的列大小符合 DB2 頁面大小。 請確定已正確指定表格空間名稱。
- 如果您使用 記憶體型持續性 (僅適用於網路部署環境):
- 檢閱 記憶體至記憶體抄寫。
- 檢閱階段作業管理程式的內部抄寫網域內容。
階段作業在相同用戶端機器上的多個瀏覽器之間共用
此行為與瀏覽器相關。 它在瀏覽器供應商之間有所不同,也可能根據瀏覽器是作為新程序啟動,還是作為現有瀏覽器階段作業的子程序啟動 (例如,在 Windows™上點擊 Ctl-N) 而變更。
如果使用 Cookie 作為階段作業追蹤機制,則階段作業管理程式的 Cookie 經歷時間上限內容也會影響此行為。 如果經歷時間上限設為某個正值,則所有瀏覽器實例都會共用 Cookie ,這些 Cookie 會在指定的經歷時間上限內持續保存至用戶端上的檔案。
在指定的階段作業逾時間隔之後,階段作業未立即失效
SessionManager 失效程序執行緒每隔 x 秒執行一次,使任何無效階段作業失效,其中 x 是根據階段作業管理程式內容中指定的階段作業逾時間隔來決定。 對於預設值 30 分鐘, x 大約是 300 秒。 在此情況下,可能需要 5 分鐘 (300 秒) ,超過逾時臨界值 30 分鐘,特定階段作業才會失效。
JavaServer 頁面正在建立不想要的階段作業
<% @page session=false%>
另一個用戶端看到一個用戶端預期的階段作業資料
在極少數狀況下 (通常由於應用程式錯誤) ,另一個用戶端可能會看到一個用戶端預期的階段作業資料。 此狀況稱為階段作業資料交叉。 當 DebugSessionCrossover 自訂內容設為 true 時,會啟用程式碼來偵測及記載階段作業資料交叉的實例。 會執行檢查,以驗證只會存取或參照與要求相關聯的階段作業。 如果偵測到任何不相符的情況,便會記載訊息。 這些訊息提供除錯此問題的起點。 只有在 WebSphere管理的分派執行緒上執行,而不是在任何使用者建立的執行緒上執行時,才會執行這項額外檢查。
如需如何設定此內容的相關資訊,請參閱 Web 儲存器自訂內容。
此外,如果您使用 Java Proxy 或 Java 隨需應變路由器,您可以考慮使用 http.cache.nocache.headers="Set-Cookie,Set-Cookie2" 和 cache.query.string=true (如需相關資訊,請參閱 HTTP Proxy 伺服器自訂內容 )-或-取消勾選 Enable caching 來測試,以完全停用快取 (如需詳細資料,請參閱 Proxy 伺服器設定 )。 任何這些變更都可能影響效能,且應該事先測試。
在 HTTP 階段作業計時器到期之後,使用者未登出
如果 WebSphere Application Server 的使用者登入應用程式,且閒置的時間超過指定的 HTTP 階段作業逾時值,使用者資訊不會失效,使用者認證會維持作用中,直到 LTPA 記號逾時為止。
com.ibm.ws.security.web.logoutOnHTTPSessionExpire 內容僅適用於使用表單登入的應用程式。- 在管理主控台中,按一下 安全> 廣域安全。
- 在「自訂內容」之下,按一下 新建。
- 在「名稱」欄位中,輸入 com.ibm.ws.security.web.logoutOnHTTPSessionExpire。
- 在值欄位中,輸入 true。
- 按一下套用並儲存,以儲存對配置所做的變更。
- 重新同步化並重新啟動伺服器。
更新已啟用階段作業持續性的應用程式時,在執行時期可能會發生異常狀況
在執行時期啟用階段作業持續性並執行應用程式更新的使用者,在重新啟動應用程式之後可能會遇到非預期的異常狀況。
如果已進行更新來變更儲存的屬性,則在應用程式更新之前,如果應用程式無法處理這些變更,則相關聯應用程式所建立的所有階段作業可能都必須失效。 在此狀況下,也必須從後端移除所有階段作業物件。 請參閱 HTTP 階段作業失效資訊,以進一步瞭解如何適當地移除這些階段作業。