2012-04-21 20 views
1

我跟着http://symfony.com/doc/current/book/security.html#stateless-authentication和標誌設置爲true。但是,會話仍在創建中。我正在使用PdoSessionStorage來存儲會話,如果這有什麼不同。的Symfony2:無國籍身份驗證設置爲true,會話仍然會被創建

firewalls:   
    api_area: 
     pattern: ^/api/ 
     stateless: true 
     http_basic: 
      realm: "RESTful API" 

任何幫助,將不勝感激。

+0

您網站的不同區域正在使用哪些其他包可能正在使用會話?尤其是,即使未使用Facebook登錄,FOS Facebook套件也會啓動會話。 – roverwolf 2012-04-22 16:53:16

+0

我使用FOSUserBundle,WebProfilerExtraBundle,FOSJsRoutingBundle,VichUploaderBundle。讓我試試產品環境,看看它是否創建會話。 – 2012-04-22 16:58:17

+0

也是,它仍然在將auto_start設置爲false並且在產品環境中創建會話......這樣可以消除Web分析器需要任何會話的可能性。 – 2012-04-22 19:00:37

回答

2

更新:隨着#2200(Symfony的2.1)的配置選項framework.session.auto_start已經不存在。現在會話始終根據需求開始,只要php-ini設置合適。

「無國籍身份驗證」的意思,它不使用會話進行身份驗證,但是這並不意味着,將有沒有會話可言。特別是隨着

framework: 
    session: 
     auto_start: true 

總會有活動會話

還要注意如果你使用一個登錄表單已鏈接

頁面上的公告,Symfony2的將創建即使一個cookie你將無狀態設置爲true。

+0

我的auto_start對於php.ini和我的config.yml都設置爲false。我也爲這個特定的上下文區域使用基本的http身份驗證。我唯一的問題是,如果認證不依賴於會話 - 是否有任何副作用,首先進行會話(除了在我的pdo存儲中佔用條目?) P.S.在同一頁面上,它說:「沒有cookie將由Symfony2創建」,該標誌設置爲 – 2012-04-21 22:38:18

+0

此解決方案已棄用! – skonsoft 2015-04-03 08:32:57

2

萬一它可以幫助別人誰是這個「Symfony2中似乎總是啓動一個會話,即使PHP具有自動啓動設置爲0,顯然Symfony2中被配置爲不自動啓動會話」的奮鬥.. 。

我發現我的代碼有用於顯示的提示信息(如果存在),實際上,如果它不存在啓動會話 - 每一頁上。

我:

{% for type, flashMessages in app.session.flashbag.all() %} 
    {% for flashMessage in flashMessages %} 
    <div class="alert alert-{{ type }}"> 
     {{ flashMessage }} 
    </div> 
    {% endfor %} 
{% endfor %} 

並要求對會話對象的flashbag的過程中,汽車如果它不存在啓動會話。

如果我包裹在上面的代碼塊:

{% if app.session.started %} 
    ... 
{%endif%} 

問題消失。

這導致了很多不必要的性能開銷 - 因爲PHP會話cookie的不必要的設置意味着我的針對未登錄頁面的緩存策略被破壞了。

希望這會有所幫助

+1

你可以使用'NullSessionHandler'來擺脫會話而不打擾你的代碼。它的FQN是'Symfony \ Component \ HttpFoundation \ Session \ Storage \ Handler \ NullSessionHandler',你可以在這裏看到如何使用自定義會話句柄:[Symfony Cookbook:如何使用PdoSessionHandler將會話存儲在數據庫中] /symfony.com/doc/2.3/cookbook/configuration/pdo_session_storage.html)。只需用'session.handler.null'替換'session.handler.pdo'定義,使用上面提到的類。 – flu 2014-10-21 15:30:33

+0

在文檔中它不知道「app.session.started」,它被稱爲使用'app.request.hasPreviousSession'。 http://symfony.com/doc/current/components/http_foundation.html#accessing-the-session – COil 2017-10-18 12:57:40