我想出了我该怎么做。
在每个 Scalatra servlet 中,我都可以访问servletContext
实现javax.servlet.ServletContext
接口的全局。我可以使用它的两种方法setAttribute(x: String, y: Any)
来getAttribute(x : String)
存储关于我的会话的信息,其中 x 是我的唯一标识符,y 是编码为 case class 的会话信息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。