【问题标题】:Ajax request in prod environment causes Access is Denied (user in not fully authenticated)prod 环境中的 Ajax 请求导致访问被拒绝(用户未完全通过身份验证)
【发布时间】:2013-08-08 14:30:13
【问题描述】:

我正在使用 Symfony 2.3,但我的生产服务器出现问题。

在生产环境中,所有 AJAX 请求都失败(我不明白什么机会)会发生(并不总是)。在 prod.log 我有:

security.INFO: Populated SecurityContext with an anonymous Token [] []
[2013-08-08 16:03:28] security.INFO: No expression found; abstaining from voting. [] []
[2013-08-08 16:03:28] security.DEBUG: Access is denied (user is not fully authenticated)      by  "/var/www/clients/client1/web1/web/vendor/symfony/symfony/src/Symfony/Component/Security/Http/Firewall/AccessListener.php" at line 73; redirecting to authentication entry point

如果我在 prod 环境中并刷新页面(在 ajax 错误之后),则什么也不会发生。我仍然登录。但是 ajax 失败并出现同样的错误。 如果我切换到 app_dev.php,错误就会消失并且 AJAX 可以工作。

(ajax路由在game/*模式下)

这是我的配置:

jms_security_extra:
secure_all_services: false
expressions: true

security:
    encoders:
        Gdr\UserBundle\Entity\User: sha512

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
    database:
        entity: { class: GdrUserBundle:User, property: email }

firewalls:
    secured_area:
        pattern:    ^/
        form_login:
            check_path: /login_check
            login_path: /login
            success_handler: authentication_handler
        logout:
            path:   /logout
            target: /
            success_handler: authentication_handler
            invalidate_session: true
        anonymous: ~

access_control:
    - { path: /game/*, roles: ROLE_USER }
    - { path: /login/choose-character, roles: ROLE_USER }
    - { path: /login, roles: IS_AUTHENTICATED_ANONYMOUSLY}
    - { path: /logout, roles: ROLE_USER }
    - { path: /admin/*, roles: ROLE_ADMIN }

######Config.yml
framework:
session:
    cookie_lifetime: 0
    save_path: "%kernel.root_dir%/Sessions/"
    cookie_httponly: false
   # save_path: ~

我使用 firebug 记录的每个 ajax 请求都会发送一个 302 标头以重定向到登录。如果我尝试在没有 AJAX 的情况下访问 url,它可以工作。没有 302 代码。

有什么想法吗?

【问题讨论】:

  • 这很傻,但开头总是有用的:你清除缓存了吗?
  • 尝试监听服务器的流量。我猜 session_id cookie 没有被发送,因此无法建立安全会话。您能否暂时禁用config.yml 中的那些自定义session 设置,看看是否是这个原因?
  • mb 你有一些禁用 cookie 的代理服务器吗?

标签: php ajax session symfony


【解决方案1】:

我发现了问题。

问题是我使用带有“www”的绝对网址,即 www.mydomain.com,但 cookie 主机没有“www”。

现在使用相对 url 没问题。谢谢大家:)

我在这里找到了我的解决方案,最后:Symfony, jQuery.ajax() call, session variables lost

【讨论】:

    猜你喜欢
    • 2014-07-14
    • 2020-10-17
    • 1970-01-01
    • 2016-03-15
    • 2023-04-06
    • 1970-01-01
    • 2015-07-25
    • 2021-08-04
    • 1970-01-01
    相关资源
    最近更新 更多