我想出了如何做到这一点。
在每个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