无Cookie表单登录Symfony2站点

时间:2012-07-09 17:02:42

标签: php session symfony safari

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

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

我尝试将会话密钥添加到重定向网址的末尾,方法是将以下内容添加到app.php的末尾(这非常简单,但我非常绝望)。

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?有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

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

检查在this line定义。检查方法是self-explained,非常清楚。

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

how to write custom authentication provider上有很好的文档 - 这可能是你灵感的起点;)