Symfony 2在iFrame中失去会话

时间:2017-01-18 23:55:01

标签: php symfony iframe

我正在尝试将托管支付解决方案添加到旧的Symfony 2.6项目中。这是标准托管解决方案,您可以在iframe中嵌入Payment Gateway的表单,以允许用户安全地提交其CC信息。付款处理后,付款网关使用GET请求将用户重定向回我的网站,并将付款令牌作为GET参数发送给我。

这一切都明显发生在iFrame内部,整个过程工作正常,除了最后一步。

当用户被重定向回iframe内的回调网址时,由于某种原因,Symfony无法识别用户的会话并将用户重定向到登录。我在日志中收到消息:security.INFO: Populated SecurityContext with an anonymous Token。这种情况仅发生在那一个呼叫上,用户仍然在该站点的其余部分登录。用户登录由fos_userbundle在标准设置中控制。

回调网址如下所示:http://some.site/foo?paymentToken=12345,如果我直接在浏览器中输入该网址就可以了。即使我将iframe的src直接设置为该url,它也能正常加载。但是当用户302从支付网关重定向回该网址时,它会失败(使用Chrome浏览器)。

支付网关使用https,我的网站使用普通的http,所以我猜它与切换安全级别有关?但不知道如何解决它。

由于重定向来自第三方服务器,因此我无法控制标头或有关该请求的任何其他内容。

更新:我发现Chrome会发送标题:upgrade-insecure-requests:1,不确定是否会导致问题?

2 个答案:

答案 0 :(得分:0)

我可以确认这不是Symfony问题,而是Chrome如何处理从安全站点到不安全站点的重定向问题(可能是错误?)。

Chrome不会在从https到http页面的302重定向上发送任何Cookie,这就是用户无法正确识别的原因。 Firefox的一切正常。

答案 1 :(得分:0)

这也可能是您在app_dev.php(开发模式)中测试应用程序,而iframe正在调用生产版本(app.php)。每个应用程序管理不同的会话。