如何跟蹤每個servlet請求的會話 ?
服務器通過在瀏覽器上保存會話ID的cookie標記用戶來識別用戶。在服務器上,會話是您放置數據的位置,您需要在客戶端/服務器交互期間跟蹤數據(嚮應用程序提供狀態)。
session.setAttribute("name", SerializableObject)
注:因爲在數據存儲和內存緩存應用程序引擎存儲會話數據,存儲在會話中的所有值必須實現java.io.Serializable接口。
然後,您可以通過做
request.getSession()
搶會話出的HttpServletRequest的看到的Javadoc:here
後您找回您的servlet的內部會議上,你用session.getAttribute("name")
檢索任何數據你有興趣跟蹤相互作用。
有沒有在全球範圍內存儲會話的每個請求
爲什麼存儲它在全球範圍時具有ID訪問會話的唯一的事情就是有一個請求,該servlet的方式,帶有該會話ID。並非您應用程序中的所有內容都需要了解每個請求。
這裏是一個要求,與一個會話ID cookie的例子:
GET /something.htm HTTP/1.1
Accept: www/source
Accept: text/html
Cookie: sessid=123456789
你不能在全球存儲這些信息,它是唯一的每個請求。
而不必通過它
當與數據做有用的東西,不通過會話的方式,傳遞有用的信息,如用戶名,購物車等內容
HttpSession session = request.getSession() //inside a servlet
String userName = session.getAttribute("name");
List<ShoppingItems> items= session.getAttribute("cart");
MakeTheUserPay(userName, items) //no session passing here
您的業務邏輯方法甚至不應該知道會話是什麼。這更像是一種人造物。
說實話。正確的方法是傳遞信息。你的應用程序不應該太複雜,以至於不得不將這些信息發送到下一個方法。 謝謝大家。 – corgrath 2010-05-20 19:14:38