如何使用FOSBUNDLE登录SESSION

how to use FOSBUNDLE login SESSION

我将 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]);
    }
}

所以问题出在哪里?

(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' => $session] 将会话分配给 (5) 中的变量 test。在转储中写入 test.all 相当于 等同于 ,如以下 PHP 代码:

var_dump($session->all());

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

如果您的用户已通过身份验证,您可以像这样检索它:

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

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