不同使用者之間session內容互相沖突
現象是:
A使用者在1.jsp頁面中訪問資料庫,返回的是一個物件,用下面這種辦法:
session.setAttribute("obj",myobj);
把這個物件放到session中。然後在2.jsp中用
MyObjects obj=(MyObjects)session.getAttribute("obj");
方法得到這個物件,再從中取值。
B使用者也作同樣的操作。
如果A先,B後,那麼A之前放到session中的obj就會被B的obj替換掉。
解決方法:
首先你的儲存個人資訊的類的屬性不可以設定為static,
檢查是否存在這個問題,如果這裡沒有問題。
那麼因為你自己寫的類是執行緒不安全的,你如果在這個類中對session進行操作,當
多個使用者同時訪問是,可能出現上邊的問題。
解決辦法,在你的類之前,加上 synchronized 關鍵字,進行同步。確保一次只有一個使用者執行裡邊的方法。當然,也可以只對某幾個方法加上這個關鍵字。
會話管理一般是由servlet引擎所提供的,用來跟蹤所有的客戶端-伺服器連線,為每一個連線分配唯一的Id,在建立連線時分配給客戶端,並被傳送給後續響應中的客戶端.(使用ctrl+N新開啟的視窗仍然屬於後續連線)
會話管理不僅僅是識別連線,每個會話是一個java物件(HttpSession類),所以通過ip來識別說法是不對的.
將sessionId分配給客戶端,不同的伺服器有不同的方法,常見的技術有如下三種:
1 ) URL重寫
session id的名稱-值新增到URL(名稱必須是jsessionid)
2 ) 通過cookie
cookie的名稱必須是JSESSIONID,需要瀏覽器支援cookie
3 ) 加密套接字協議層(SSL)
Http協議的SSL已經建立在會話管理中
使用不同的新開視窗分別登入是不同的連線,session也是不一樣的.
我們寫一個測試頁面來檢驗一下sessionId的值和cookie中的值:
頁面的程式碼如下(testSession.jsp):
<1>在weblogic中測試
開啟一開視窗,頁面顯示為:
Cookie in the request:
JSESSIONID : BFbXpjlEhXOdHjJbmNal8NwPniBA4UUH2Yu0SWAeW69iQEfqCyYn!-2110814544
Request session Id : BFbXpjlEhXOdHjJbmNal8NwPniBA4UUH2Yu0SWAeW69iQEfqCyYn!-2110814544!1095064343206
使用ctrl+N開啟一個新視窗的頁面顯示為:
Cookie in the request:
JSESSIONID : BFbXpjlEhXOdHjJbmNal8NwPniBA4UUH2Yu0SWAeW69iQEfqCyYn!-2110814544
Request session Id : BFbXpjlEhXOdHjJbmNal8NwPniBA4UUH2Yu0SWAeW69iQEfqCyYn!-2110814544!1095064343206
重新開一個視窗,頁面顯示為:
Cookie in the request:
JSESSIONID : BFbyitXTY2Kt72b2vn2uvrzHsGjt98larvxKSz4fcZngOsIVsGSI!-2110814544
Request session Id : BFbyitXTY2Kt72b2vn2uvrzHsGjt98larvxKSz4fcZngOsIVsGSI!-2110814544!1095064562753
我們可以看到對於每個新開啟的視窗其session是不一樣的
<2>在oracle IAS中測試
新開視窗,頁面顯示為:
Cookie in the request:
JSESSIONID : c3df128b9f7c4a60a75a88c3cb3cb5e2.s6Tv-h0Ka3CNa30McybtahqM-x4R-xyK-x4Sa2SPmxqTc3mInAeMbN8QmN0Sc2SHc30Ka2bMn69Rnk8IrRrR-B9ymwTxpQOxbhqOax4R8R9ymBrzmwbMn69Rnk8xn6jAmljGr5XDqQLvpAe_
Request session Id : c3df128b9f7c4a60a75a88c3cb3cb5e2
使用ctrl+N開啟新視窗的頁面顯示為:
Cookie in the request:
JSESSIONID : c3df128b9f7c4a60a75a88c3cb3cb5e2.s6Tv-h0Ka3CNa30McybtahqM-x4R-xyK-x4Sa2SPmxqTc3mInAeMbN8QmN0Sc2SHc30Ka2bMn69Rnk8IrRrR-B9ymwTxpQOxbhqOax4R8R9ymBrzmwbMn69Rnk8xn6jAmljGr5XDqQLvpAe_
Request session Id : c3df128b9f7c4a60a75a88c3cb3cb5e2
重新開一個視窗,頁面顯示為:
Cookie in the request:
JSESSIONID : 556dca64e085417bad8f9d88be0401ee.s6Tv-h0Ka3CNa30McybtahqM-x4R-xyK-x4Sa2SPmxqTc3mInAeMbN8QmN0Sc2SHc30Ka2bMn69Rnk8IrRrR-B9ymwTxpQOxbhqOax4R8R9ymBrzmwbMn69Rnk8xn6jAmljGr5XDqQLvpAe_
Request session Id : 556dca64e085417bad8f9d88be0401ee
同樣我們可以看到每個新開視窗其session是不一樣的