如何使用FOSBUNDLE登录SESSION

时间:2017-03-17 21:58:20

标签: php symfony session fosuserbundle

我使用FOSBUNDLE和symfony 2.8我已经登录/注册并且成功连接到数据库但我有一个将会话变量传递给其他页面的问题

我尝试使用这个简单的代码在网页上输出会话但是我收到了这个错误

无法启动会话:已由PHP启动。 当我删除

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

我收到此错误

注意:未定义的变量:session

<?php

namespace site\blogBundle\Controller;
use AppBundle\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
class DefaultController extends Controller
{
    public function indexAction()
    {

        $session = new Session();
        $session->start();
        $session->set('username', 'Drak');
        $session->get('username');
        return $this->render('siteblogBundle:Default:index.html.twig' ['test' => $session]);
    }
}

那么问题出在哪里?

2 个答案:

答案 0 :(得分:1)

(1) $session = new Session();
(2) $session->start();
(3) $session->set('username', 'Drak');
(4) $session->get('username');
(5) return $this->render('siteblogBundle:Default:index.html.twig' ['test' => $session]);

(1)如果你想使用一个会话,你必须保持这一行

(2)这就是导致警告的原因。根据您的设置,Symfony可能已经开始会话。您可以通过执行以下操作来防范此警告:

if (!$session->isStarted()) {
    $session->start();
}

(3)这将在会话中设置用户名。请注意这是您的用户名,与Symfony的用户管理无关。正如@Mathieu_Dormeval指出的那样,你可以从安全上下文中得到这个。

(4)这将检索您在密钥username下的会话中存储的任何内容(在您的情况下是(3)中的名称)。请注意,您不会将此值分配给变量或将其输出,因此现在写入它的方式有点无用。

(5)这可能是您遇到问题的原因。由于我们无法看到模板,因此很难告诉您该怎么做。要获取会话中所有数据的列表,您可以在index.html.twig中执行以下操作:

{{ dump(test.all) }}

这只适用于开发模式。 dump是Twig的一个帮助方法,用于输出原始数据,类似于PHP的var_dump()方法。您通过执行test将会话分配到(5)中的变量['test' => $session]。在转储中编写test.all等价,如下面的PHP代码:

var_dump($session->all());

调用all()将返回一个数组,其中包含会话中存储的所有数据。有关访问会话中数据的更实用方法,您可以查看Session提供的其他方法:https://symfony.com/doc/current/components/http_foundation/sessions.html#session-attributes

答案 1 :(得分:0)

如果您的用户已通过身份验证,则可以检索它,如下所示:

$user = $this->container->get('security.context')->getToken()->getUs‌​er();

有关安全性的更多信息,请查看this ans。