DWR Session Error問題的解決辦法

2022-12-03 05:57:07 字數 2321 閱讀 3954

問題情境再現

使用的dwr版本2.0

在一台伺服器上的不同埠上部署了同樣的程式(tomcat5.5.28 80埠,tomcat 5.5.28 8080埠)

使用瀏覽器先後登陸80,8080埠的程式,都不登出,保持會話狀態。

然後瀏覽器切換到8080的乙個使用了dwr ajax功能的頁面上,瀏覽器彈出session error的提示。

但是,如果切換到80埠的程式上,同樣進入到乙個使用了dwr ajax技術的頁面上,沒有session error的提示。

問題診斷:

初步懷疑瀏覽器的問題。

檢查瀏覽器的cookie中的jsessionid的值。因為我們知道,http協議本身是無狀態的,伺服器標識同一次會話的過程就是借助於cookie中的某個值或者通過url重寫的方式來實現。這也是jsp程式的session原理。

檢查發現:cookie中存在2個sessionid項,sessionid的值不同。

因為站點位址相同,url也相同(除了埠不同外),因此,瀏覽器「誤」認為是同乙個程式,把快取的cookie項都傳送回了伺服器。

然後再觀測ajax請求的值,即http post或get的引數值如下:

在這裡,務必注意

實際上,一般情況下,httpsessionid和cookie中的jsession值是相同的。

至於dwr元件中,為什麼要加上httpsessionid,這是因為dwr開發團隊考慮到了跨站攻擊問題。因此,通過驗證dwr ajax請求中的httpsessionid值,

來防止跨站攻擊。

在重現,診斷問題過程中,發現session error的資訊是來自dwr ajax請求的響應中,丟擲的異常是

因此可以懷疑這個錯誤資訊是源於dwr源**中的。

用eclipse開啟**到的dwr源**。搜尋session error的資訊,然後在 類中找到了,其部分**如下:

}仔細分析這段**,即使在上述問題情境環境中,也不會出現session error的錯誤。

然後反編譯正在使用的dwr類檔案,找到batch類,**卻不同,**如下:

該**沒有考慮到cookie**現多個jsession的情況。

到此,問題就發現並解決。

由於dwr低版本的bug引起的,公升級dwr版本即解決此問題。

可能,讀者還有乙個疑問:為什麼該問題只出現在8080埠上。

檢查發現:80埠的cookie項(就是80埠產生的jsessionid出現在cookie項的最前面),

這樣在80埠上的程式訪問中,dwr ajax請求中的httpsessionid和cookie項最前面的jsessionid值相同,在80埠上,就自然不會出現session error錯誤。

Lumion 2 5安裝遇到的問題以及解決辦法

lumion 2.5安裝後出現彈窗問題的解決辦法 1 大家 並按照教程安裝 破解好lumion2.5以後進入lumion2.5在設定裡面可以看到確實是破解版 2 隨便開啟乙個例項場景。卻彈出這樣的對話方塊 並且這些對話方塊無論怎麼點確定都會迴圈彈出。大家都會想是不是沒有破解成功呢,於是解除安裝,再安...

問題的解決

摘要如何培養學生在真實的工作 生活環境中解決各種問題的能力已經成為各門學科關注的焦點,學校情境下的問題大部分是良構問題,而現實生活中面臨的問題大多是非良構問題。解決良構問題的程式是啟用圖式表徵問題,搜尋解決方案和執行解決方案。結構性知識與具體領域的知識是解決良構問題的主要成分。解決非良構問題的過程包...

解決問題與解決問題的策略

隨著課程改革的深入,解決問題的教學越來越成為我們小學數學教師最為關注的熱點之一。本人深入品讀 數學課程標準 實驗稿 中 形成解決問題的一些基本策略,體驗解決問題的多樣性,發展實踐能力與創新精神 等指導性話語,積極對新教材解決問題的教學進行探索 思考中,逐漸也有一些自己的看法。一 解決問題 對解決問題...