2012-07-03 85 views
2

如何在不更改原始源代码的情况下解决session_start冲突? Symfony组件或Silex如何检查会话是否已经存在?Symfony/Silex + Facebook SDK:会话开始冲突

Notice: A session had already been started - ignoring session_start() in 
myapp/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php on line 146 

编辑:这里的index.php

require_once __DIR__.'/vendor/autoload.php'; 

/** 
* from Heroku's Facebook template 
*/ 
require_once('AppInfo.php'); 
require_once('utils.php'); 


use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\HttpKernel\HttpKernelInterface; 
use Symfony\Component\Yaml\Parser; 
use Silex\Provider\FormServiceProvider; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* Currently using git submodule, will move to composer.json 
*/ 
require_once('sdk/src/facebook.php'); 

$facebook = new Facebook(array(
    'appId' => AppInfo::appID(), 
    'secret' => AppInfo::appSecret(), 
)); 

$app = new Silex\Application(); 
// ... 

回答

5

的FB SDK启动会话only if it's not started already的前几行。在启动silex会话的代码之后移动sdk初始化。

This是Symfony2用来查看用户是否有会话的功能。本质上它检查会话cookie的存在。

+0

谢谢,也为链接。这看起来像你我的人去Silex相关的帮助;) –

+0

我正在关注rss中的silex标签,并在我能的时候帮忙。 :) – Maerlyn

+0

如果您想使用Facebook身份验证,则该解决方案不可能或者至少非常非常难看,因为在请求遇到控制器之前安全性必须发生。 – shredding