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