无Cookie形式登录Symfony2网站



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

我一直在尝试的解决方案是将PHPSSID设置为表单上的隐藏字段,并使用它来跟踪会话,而不是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?有更好的方法吗?

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

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

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

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

最新更新