如何在Symfony2中启用会话?

时间:2014-08-14 12:32:01

标签: php symfony session

我想在Symfony2中启用会话,但我不知道该怎么做。

我设置了这样的配置文件:

#app/config/config.yml
framework:
    session:
        name:             session
        cookie_lifetime:  0
        cookie_httponly:  true

但似乎我的会话仍处于禁用状态且未启动。我在我的控制器中测试了这段代码:

echo ( session_status() !== PHP_SESSION_ACTIVE )
    ? "Session is not started!"
    : "Session OK";

它返回“会话未启动!”。它只在我设置时才有效:

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

但这是非常难看的解决方案,特别是我在Symfony2工作。你有什么想法吗?

5 个答案:

答案 0 :(得分:3)

您不需要激活它,默认设置为symfony。

默认条目是:

framework:
    session: ~

您也不需要开始新会话(实际上您会收到错误,因为它已经从symfony开始)。

15.04.2016编辑:

现在语法略有不同

控制器

$session = $this->get('session');

枝条

app.session

旧版本:

您只需要从请求中获取控制器中的会话!

$session = $this->getRequest()->getSession();

这就是全部。

在Twig中,您可以通过

访问它
app.request.session

答案 1 :(得分:0)

在我目前的项目中,我已经启用了这样的会话,并且工作正常:

(在框架选项下)

session:
        handler_id: ~
        cookie_domain: .st.dev
        name: SFSESSID
        cookie_lifetime: 0
        save_path:            "%kernel.cache_dir%/sessions"
        gc_divisor: 2000
        gc_maxlifetime: 86400

您还可以查看此documenation page

答案 2 :(得分:0)

在app / config / config.yml中,在framework部分下,您必须有一个会话项:

framework:
    # ...
    session: ~

请看一下:http://symfony.com/doc/current/reference/configuration/framework.html#session

答案 3 :(得分:0)

Symfony2中的Session语法略有不同:

$session = $this->getRequest()->getSession();

// store an attribute for reuse during a later user request
$session->set('foo', 'bar');

// in another controller for another request
$foo = $session->get('foo');

答案 4 :(得分:-1)

如果使用最新版本的Symfony2,当您在其中读取/写入数据时会自动启动会话。

但是,您可以通过实例化会话变量并启动它来强制启动它:

$session = new Session();
$session->start();

你应该看一下doc。请注意,Symfony会话与本机会话不同。

http://symfony.com/doc/current/components/http_foundation/sessions.html

http://symfony.com/doc/current/components/http_foundation/session_php_bridge.html