1

我正在尝试使用 Symfony 2 安全组件,但我遇到了 IE9 问题。它适用于任何其他浏览器,我觉得这很奇怪。Symfony 版本 2.0.16。

控制器就像“书中”。我有一个用于登录表单的自定义模板文件,使用文档中的模板文件没有帮助。还制作了自定义路由路径,但在安全配置文件中指定了它们。这是安全配置文件,我在那里做了一些更改,但我认为一切正常......

security:
    encoders:
        Acme\MyBundle\Entity\User:
            algorithm:        sha1
            encode_as_base64: true
            iterations:       5

    role_hierarchy:
        ROLE_CLIENT: ROLE_USER
        ROLE_MANAGER: ROLE_USER
        ROLE_ADMIN: [ROLE_USER, ROLE_MANAGER, ROLE_ALLOWED_TO_SWITCH]

    providers:
        main:
            entity: { class: Acme\MyBundle\Entity\User, property: email }

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false
        dev_custom:
            pattern:  ^/createUser
            security: false
        login:
            pattern:  ^/(login-custom|remind-pass)$
            security: false
        secured_area:
            pattern:    ^/
            form_login:
                login_path: /login-custom
                check_path: /login-check-custom
            logout:
                path:   /logout-custom
                target: /

    access_control:
        - { path: ^/, roles: ROLE_USER }

在 IE9 中提交表单后,我只是被重定向回表单,而不验证数据。在日志文件中我发现:

[2012-08-14 02:51:00] security.INFO:身份验证请求失败:您的会话已超时,或者您已禁用 cookie。[] [] [2012-08-14 02:51:00] security.DEBUG: 重定向到 /login[] []

当然,我启用了 cookie。

在 ie 控制台中有一个警告“HTML1113 goin to quirks mode”。我做错了什么?

4

2 回答 2

0

我在这里找到了答案: 即复杂的子域cookie问题

简而言之:即当子域包含“undesrcore”时,静默丢弃cookie。我以为我错误地配置了安全组件或模板或标题有问题,但事实并非如此。

于 2012-08-18T13:40:01.947 回答
0

下面是我在一个项目中设置的配置,该项目在本地环境中的 Chrome/Firefox/Safari 中运行良好,但在 Internet Explorer 中运行良好。

我可以看到使用提琴手,Internet Explorer 没有在浏览器中保留会话 cookie。

在生产环境中一切正常。

我意识到删除或设置为 0 的值:

cookie_lifetime: 86400 # 一天,cookie 生命周期

gc_maxlifetime: 1800 # 30 分钟,会话生命周期

允许登录,所以我设置了这个conf。对于开发环境。

我的 config.yml 中有以下配置

framework:
    session:
        handler_id: session.handler.pdo
        name: sessid
        **cookie_lifetime: 86400 # One day, cookie lifetime
        gc_maxlifetime: 1800 # 30 minutes, session lifetime**
        lifetime: 84600
        gc_probability: 5
        gc_divisor: 100

其中 handler_id 设置为管理 mysql 表中的会话。my_db_options: #这是一个会话存储表(有关更多信息,请参见 symfony2 文档)

pdo.db_options:
    db_table:    sessions
    db_id_col:   ses_id
    db_data_col: ses_data
    db_time_col: ses_time
    db_lifetime_col: ses_lifetime

服务.yml

session.handler.pdo:
    class:     Symfony\Component\HttpFoundation\Session\Storage\Handler\LegacyPdoSessionHandler #PdoSessionHandler (prev to versión 2.6.2)
    arguments: ["@session.database", "%pdo.db_options%"]

希望这对您的 symfony 设置有所帮助或为您提供线索。

于 2015-03-26T05:54:39.353 回答