我想在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工作。你有什么想法吗?
答案 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