2

我有一个 symfony 站点,旨在用于另一个站点的 iframe 中。对于所有浏览器,它都可以正常工作,除了 Safari,因为 Safari 不允许 iframe 设置任何 cookie。我没有登录,而是返回到没有错误的空白登录页面。

我一直在尝试的解决方案是将 PHPSESSID 设置为表单上的隐藏字段,并使用它来跟踪会话而不是 cookie。我遇到的问题是登录后,formlogin 似乎设置了一个新的会话密钥并发送了一个重定向。我无法在此重定向上获得正确的会话密钥。

我试图通过将以下内容添加到 app.php 的末尾来将会话密钥添加到重定向 URL 的末尾(这非常不合时宜,但我变得非常绝望)。

foreach(headers_list() as $header) {
    if (substr($header,0,9) == "location:") {
        if (strpos($header, '?')===FALSE && strpos($header, '#')===FALSE ) {
            header($header."?PHPSESSID=".session_id());
        }
    }
}

这添加了一个会话密钥,但它似乎是添加旧的会话密钥,而不是表单登录创建的新密钥。结果,当我尝试登录时,我收到消息“您的会话已超时,或者您已禁用 cookie。”。

如何获得正确的 session_id?有一个更好的方法吗?

4

1 回答 1

1

你得到的只是额外的安全检查,以防止恶意用户伪造会话。如果您尝试使用登录表单加载页面,然后删除所有 cookie,然后尝试进行身份验证,则会发生相同的行为。

检查是在这一行定义的。检查方法不言自明,非常清楚。

对于您的特殊任务,我会说这不是首选行为,因此您应该覆盖此类。

关于如何编写自定义身份验证提供程序有相当好的文档- 这可能是您灵感的起点;)

于 2012-08-13T21:13:54.537 回答