11

我是使用 Play Framework 2.0 的新手(我正在使用 Scala)并且对会话有疑问。

我来自 Ruby on Rails 背景,所以我倾向于考虑我在 Play Framework 中学到的关于 Ruby on Rails 的所有内容。

考虑到这一点,当我在视图中时,有什么方法可以调用存储在 Session 中的内容吗?

如果我在 Session 中存储了“hello”->“world”,我希望能够执行 @session.get("hello") 之类的操作并能够在视图中使用“world”。这可能吗?

我看到的另一个选项是将值存储在控制器中的变量中,然后通过执行 OK( var ) 之类的操作将其传递给视图,但这种方式似乎有点笨拙,尤其是当我开始使用更多变量时。

谢谢!

4

3 回答 3

22

Play 中的会话存储在 cookie 中,实际上仅用于交叉请求数据。如果这是您想要的,那么您可以使用@session.get("hello"),但您实际上可能想要的是一种将内容从控制器传递到模板的方法,而无需将它们指定为参数。在这种情况下,请在此处查看该问题的非常详细的答案: https ://stackoverflow.com/a/9632085/77409

于 2012-06-05T03:11:49.313 回答
11

是的,您可以@session.get("hello")在模板中使用,但是在将模板与 Scala 控制器一起使用时,看起来您至少需要在模板的开头指定名为“会话”的隐式参数:

@()(implicit session: play.api.mvc.Session) 

还有flash范围 - 它不同于session它只为一个请求而存在并且没有签名。因此,它最常用于传输错误/inf 消息。

请参阅会话和闪存范围文档

最后,由于每个模板只是一个 Scala 函数,您还可以从控制器调用一些操作并检索会话数据

于 2012-06-04T22:04:51.037 回答
-3

ur您可以在播放模板中定义地调用会话。

试试这个代码 - 它适用于视图:

$session.session_variable_name;
于 2013-04-03T06:27:11.543 回答