Symfony2:无状态身份验证设置为true,仍在创建会话

时间:2012-04-21 22:29:03

标签: symfony

我跟着http://symfony.com/doc/current/book/security.html#stateless-authentication并将标志设置为true。但是,仍在创建会话。我目前正在使用PdoSessionStorage存储会话,如果这会产生任何差异。

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

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

更新:使用#2200(Symfony 2.1),配置选项framework.session.auto_start不再存在。只要php-ini - 设置合适,会话就会始终按需开始。

"无状态身份验证"意味着它没有使用会话进行身份验证,但这并不意味着根本就没有会话。特别是

framework:
    session:
        auto_start: true

总会有一个活跃的会话

另请注意您已链接的页面上的通知

  

如果您使用表单登录,即使您将无状态设置为true,Symfony2也会创建一个cookie。

答案 1 :(得分:2)

为了防止其他任何正在努力解决这个问题的人#34; Symfony2似乎总是开始会话,即使PHP将自动启动设置为0并且显然Symfony2配置为不自动启动会话" ...

我发现用于显示Flash消息的代码(如果它们存在的话)实际上是在每个页面上都没有存在的情况下启动会话。

我有:

{% 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的不必要设置意味着我的非登录页面的缓存策略被破坏了。

希望这有帮助