如何在播放中初始化会话

问题描述 投票:0回答:2

嗯,这是来自刚使用Play的开发者。在使用会话时,我发现它根本不像我在servlet或jsps中所做的那样。我尝试阅读文档,发现Play中的会话存储在HTTP cookie中。我尝试导入HTTP游戏类。但是,我的问题是我无法初始化新会话以在其中设置值。我显然尝试过使用Java中的“新”会话,但显然没有解决。

Session session = new session();

也在看过我使用过的地方之后:

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

这向我显示了标识上下文和当前的错误

我尝试查看示例代码和网上代码。但是它们每个都不相同,我没有获得在Play中使用会话的基本方法,因此之后我可以使用put and get保留和检索。

我知道这个问题似乎太基本了,但是相信我,对于我所需要的任何地方都没有确切的答案。因此,请对此提供帮助。对此,任何答案,任何一段代码或任何链接都将受到高度赞赏。

java http session playframework-2.0
2个回答
2
投票

在使用Play会话时,请忘记jsp和servlet世界中有关会话的所有内容。 Play不会在服务器端存储任何内容,并且设计上是完全无状态的。 Play会话只是附加到每个http请求的cookie,它存储在客户端。 “ session”一词可能会误导您。

处理会话非常简单。您需要的所有内容都继承自play.mvc.Controller,在创建自己的控制器时必须对其进行扩展。要在其中添加值,您只需从控制器内部调用session(String key,String value)方法。例如:

public class Application extends Controller {
  public static Result login() {
    session("key", "example value");
    return ok("Welcome!");
  }
}

如果客户端上没有存储会话cookie,则此方法将创建一个新的cookie,并将其附加到HTTP响应中。否则它将修改现有的一个。

要读取储值,请使用:

String value = session("key");

您还可以从会话中删除值:

session().remove("key");

或完全销毁它:

session().clear();

这些是与Play术语中的特定Cookie巫婆一起工作的辅助方法,称为会话。没有什么能阻止您创建具有类似目的的另一个cookie。但这需要更多的写作。这些辅助方法可以节省您的时间,而且在许多情况下还绰绰有余。

您可以通过设置session.cookieName属性在application.conf中指定会话cookie名称。


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

© www.soinside.com 2019 - 2024. All rights reserved.