嗯,这是来自最近使用Play的开发人员。当谈到使用session时,我发现它根本不像我在servlet或jsps中所做的那样。 我试过阅读文档,发现Play中的会话存储在HTTP cookie中。我尝试过导入HTTP类游戏。 然而,我的问题是我无法初始化新会话以在其中设置值。 我显然已经尝试过使用' new'像在Java中那样的会话,并且显然没有成功。
Session session = new session();
在看了我曾经使用过的地方之后:
Session session = Http.Context.current().session();
显示我在识别上下文和当前
时出错我试过在网上查看示例代码和代码。但是他们中的每一个都是不同的,我没有得到在Play中使用会话的基本方法,所以在那之后我可以使用put和get来保存和检索。
我知道这个问题看起来太基本了,但相信我在任何地方都没有确切的答案可用。所以请帮我解决这个问题。 任何答案,任何代码或任何链接都将受到高度赞赏。
答案 0 :(得分:2)
在使用Play的会话时,忘记jsp和servlets世界的所有会话。 Play不会在服务器端存储任何内容,并且通过设计它完全是无状态的。 Play会话只是附加到每个http请求的cookie,它存储在客户端。在你的情况下,单词“会话”可能会产生误导。
使用会话非常简单。您所需要的只是继承自 play.mvc.Controller ,您必须在创建自己的控制器时进行扩展。要在其中放置一个值,只需从控制器中调用会话(String key,String value)方法即可。例如:
public class Application extends Controller {
public static Result login() {
session("key", "example value");
return ok("Welcome!");
}
}
如果客户端没有存储会话cookie,则此方法将创建新的并将其附加到HTTP响应。否则它将修改现有的。
要阅读储值,请使用:
String value = session("key");
您还可以从会话中删除值:
session().remove("key");
或完全摧毁它:
session().clear();
这些是使用特定cookie的辅助方法,在Play的术语中称为会话。没有什么能阻止你创建具有类似目的的另一个cookie。但它需要更多的写作。这些辅助方法可以节省您的时间,在很多情况下绰绰有余。
您可以通过设置 session.cookieName 属性在 application.conf 中指定会话Cookie名称。
答案 1 :(得分:0)
在2.8版中,不推荐使用Http.Context。这意味着,除其他外,方法“ session()”在控制器中不再可用。
这是更新的方法:
public Result info(Http.Request request) {
//This is the equivalent to the old session()
request.session() ...
}
Http.Request需要通过路由中定义的路由向下传递。更多信息here。