2012-07-09 72 views
2

我有一个symfony网站,旨在用于另一个网站上的iframe。对于所有的浏览器,它都能正常工作,除了Safari之外,因为Safari不会让iframe设置任何cookie。而不是登录,我返回到一个空白的登录页面,没有任何错误。无Cookie登录到Symfony2网站

我一直在尝试的解决方案是将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?有一个更好的方法吗?

+0

你为什么不干脆写一个行动,将通过请求其返回当前会话ID? – 2012-07-30 15:19:42

回答

1

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

检查定义为this line。检查方法是self-explained,很清楚。

对于你的特殊任务,我会说这不是首选行为,所以你应该重写这个类。

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