我想出瞭如何做到這一點。
在每個Scalatra servlet中,我可以訪問實現javax.servlet.ServletContext
接口的全局servletContext
。我可以使用它的兩種方法setAttribute(x: String, y: Any)
和getAttribute(x : String)
來存儲有關我的會話的信息,其中x是我的唯一標識符,y是會話信息,編碼爲案例類Session
。
切實我具備以下條件:
def storeSession(key : String, session : Session) {
servletContext.setAttribute(attributePrefix + key, session)
}
def loadSession(key : String) : Session = {
val session = servletContext.getAttribute(attributePrefix + key)
if (session != null) {
session match {
case s : Session => s
case _ => null
}
} else {
null
}
}
這樣我可以保持狀態的服務器上,無需通過cookie,僅客戶端必須提供一個GET值一個唯一的標識符。
我想這個技術可以應用於Java和Scala中的任何servlet,它提供了一個ServletContext
的實例,而不僅僅是Scalatra。
這是處理Java servlet環境時用於存儲「會話數據」的quick-n-easy和默認解決方案 - 正是我所需要的。 – 2013-06-20 00:39:31
你將如何獲得鑰匙?它會爲每個請求生成嗎?它如何識別會話? – Rajeev 2013-12-24 10:53:24
在我的情況下,在每個新會話中(而不是每個請求)使用隨機數生成器在代碼中的其他位置生成密鑰。任何唯一的標識符都可以使用。 – Waboodoo 2013-12-24 13:29:30