如何在Play中初始化会话

时间:2014-11-03 08:00:02

标签: java http session playframework-2.0

嗯,这是来自最近使用Play的开发人员。当谈到使用session时,我发现它根本不像我在servlet或jsps中所做的那样。 我试过阅读文档,发现Play中的会话存储在HTTP cookie中。我尝试过导入HTTP类游戏。 然而,我的问题是我无法初始化新会话以在其中设置值。 我显然已经尝试过使用' new'像在Java中那样的会话,并且显然没有成功。

Session session = new session();

在看了我曾经使用过的地方之后:

Session session = Http.Context.current().session();

显示我在识别上下文和当前

时出错

我试过在网上查看示例代码和代码。但是他们中的每一个都是不同的,我没有得到在Play中使用会话的基本方法,所以在那之后我可以使用put和get来保存和检索。

我知道这个问题看起来太基本了,但相信我在任何地方都没有确切的答案可用。所以请帮我解决这个问题。 任何答案,任何代码或任何链接都将受到高度赞赏。

2 个答案:

答案 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