Symfony2.3符号链接web目录导致登录表单重定向循环

时间:2014-06-20 07:14:36

标签: symfony redirect login

我的目标是为这3个应用设置这样的网址:

http://somedomain.com/symfony-app/app_dev.php
http://somedomain.com/symfony-app2/app_dev.php
http://somedomain.com/symfony-app3/app_dev.php

更新:所有3个sf2应用程序彼此独立。这意味着他们之间没有互动。

目录结构如下:

/var/webroot/symfony-app 
/var/webroot/symfony-app2 
/var/webroot/symfony-app3

(其中 symfony-app 是放置在 / var / webroot 之外的其他目录上的symfony-app的sf web文件夹的符号链接)。对symfony-app2和symfony-app3也这样做。

问题:每当我访问http://somedomain.com/symfony-app/app_dev.php/login时,我都会在http://somedomain.com/symfony-app/app_dev.php上获得重定向循环

security.yml

 security:
       providers:
          fos_userbundle:
             id: fos_user.user_provider.username_email

      encoders:
           FOS\UserBundle\Model\UserInterface: sha512

      firewalls:
          main:
              http_basic: ~
              pattern: ^/
              form_login:
                 provider: fos_userbundle
                 csrf_provider: form.csrf_provider
                 default_target_path: /admin #authentication required page
                 always_use_default_target_path: true
              logout:
                 target: /login
              anonymous:    true
              switch_user: true

      access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, role: IS_AUTHENTICATED_FULLY } 

在设置intercept_redirects后收到此错误消息:在config_dev.yml中为true:

此请求重定向到http://somedomain.com/symfony-app/app_dev.php/login。 Web调试工具栏拦截了重定向以帮助调试。有关更多信息,请参阅Profiler的“拦截重定向”选项。

应用程序在apache vhost上使用效果很好,但每个都在完全不同的URL上。当我尝试将所有3个应用程序作为子目录时,对.htaccess或security.yml没有进行任何修改。

我是否错过了security.yml中的任何配置?的.htaccess?

任何帮助将不胜感激。 TIA。

1 个答案:

答案 0 :(得分:0)

在第一次提示时,没有进入细节,它闻起来像你的会话混合。尝试设置Cookie路径配置http://symfony.com/doc/current/reference/configuration/framework.html#cookie-path

编辑 - 要求进一步解释

会话cookie是在会话开始时由PHP生成的,以便能够跟踪用户进一步访问以及她对您的Web应用程序发出的http请求。默认情况下,cookie域设置为发出请求的域,示例中为“somedomain.com”,路径为/。因此,所有这3个网络应用程序将共享相同的会话cookie - somedomain.com with path /。我的意思是你应该在你的所有3个网络应用程序中设置cookie路径,这样他们每个人都可以拥有自己的会话cookie,如下所示:

# symfony-app/app/config.yml
framework:
    session:
        cookie_path: /symfony-app/

# symfony-app2/app/config.yml
framework:
    session:
        cookie_path: /symfony-app2/

# symfony-app3/app/config.yml
framework:
    session:
        cookie_path: /symfony-app3/

这样,每个应用程序都会拥有自己的会话cookie:

  • app1将拥有域somedomain.com和path / symfony-app /
  • app2将拥有域somedomain.com和path / symfony-app2 /
  • app2将拥有域somedomain.com和path / symfony-app3 /

他们不会重复使用其他应用的会话Cookie。

但是,不太确定这是不是你的问题,但这是我注意到的第一件事。你可能会打开app1,然后是app2,它从app1获取了cookie,但是没有从cookie中找到该id的会话数据,因为它保存在app1会话存储中,你就自己进入了循环。