2

我关注了http://symfony.com/doc/current/book/security.html#stateless-authentication并将标志设置为 true。但是,仍在创建会话。我目前正在使用 PdoSessionStorage 来存储会话,如果这有什么不同的话。

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

任何帮助,将不胜感激。

4

2 回答 2

2

更新:#2200 (Symfony 2.1) 配置选项framework.session.auto_start不再存在。只要设置合适,会话现在总是按需启动php-ini

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

framework:
    session:
        auto_start: true

总会有一个活跃的会话

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

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

于 2012-04-21T22:32:14.403 回答
2

以防万一它可以帮助其他正在努力解决这个问题的人“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 的不必要设置意味着我对未登录页面的缓存策略被破坏了。

希望这可以帮助

于 2014-09-08T07:06:03.153 回答