Symfony2:新的Session()给出错误“会话已经启动......”

时间:2013-04-20 12:42:10

标签: session symfony sessionid

我很喜欢symfony。我想在我的代码中使用Session_id

当我更改php.ini并设置session.auto.start变量 true 时,我发出symfony错误 在false之后这个参数我应该使用

$session = new Session();

但是当我执行indexAction()时,我现在遇到了一个新错误:

An exception has been thrown during the rendering of a template ("Notice: A session had already been started - ignoring session_start() in C:\xampp\htdocs\artgirl\app\cache\dev\classes.php line 105") in "DotArtBundle:Basket:index.html.twig".
500 Internal Server Error - Twig_Error_Runtime
1 linked Exception: ErrorException »

BasketController:

class BasketController extends Controller {
    public function getStaticAction(){
        $session = new Session();
        $session->start();

        $em = $this->getDoctrine()->getManager();
        $sql  = "Select ... where basket_id = '".$session->getId()."'";
    }
    //###############################################
    public function indexAction(){
      $user = new User();
      $form = $this->createFormBuilder($user)
                   ->add('username', 'text')
                   ->add('password', 'text')
                   ->add('email', 'text')
                   ->getForm();
    return $this->render('DotArtBundle:Artist:register.html.twig', array('form' => $form->createView(l)));
    }
}

我在base.html.twig中使用getStaticAction()

        {% set vPrice = render(controller('DotArtBundle:Basket:getStatic')) %}

1 个答案:

答案 0 :(得分:2)

在版本2.1中,他们改变了会话的工作方式,而不是自动启动它们是按需启动的。

据我了解,Symfony 2会话与PHP会话不兼容,Symfony取代了许多基本PHP会话功能,因此您需要在php.ini中关闭自动启动并使用以下内容初始化会话: p>

use Symfony/Component/HttpFoundation/Session/Session;
$session = new Session();
$session->start();

然后你应该可以在任何需要ID的地方做这样的事情:

$session = $this->getRequest()->getSession()->get('id');

Symfony explains their sessions handling over here,可能值得一读。