来自同一域上iframe的Symfony3 AJAX请求未保存会话属性

LaurynasMališauskas

我在启用OPcache的PHP 5.5.28上使用Symfony v3.0.6。站点管理员的安全性由FOSUserBundle管理。

网站用户访问的页面在同一域的iframe中以非Symfony形式显示给他们,这些表单向简单的Symfony动作发出AJAX请求:

public function validateAction(MailingList $mailingList, Request $request)
{
  $email = $request->get('email');
  $code = $request->get('code');
  if ($mailingList->getCode() == $code) {
    $response = new Response('', 200);
    $securityManager = $this->get('security_manager');
    $securityManager->grantAccess($request->getSession(), $mailingList, $email);
    $response->headers->set('Access-Control-Allow-Origin', '*');
    return $response;
  }
  $responseFailed = new Response('N2', 401);
  $responseFailed->headers->set('Access-Control-Allow-Origin', '*');
  return $responseFailed;
}

如您所见,我调用了我的自定义服务SecurityManager,在其中向会话添加了一个属性:

public function grantAccess(Session $session, MailingList $mailingList, $email) {
  $session->set('page_'.$mailingList->getId(), 
    json_encode(array(
      0 => hash('sha256', $email.$mailingList->getCode()),
      1 => $email
    ))
  );
}

AJAX调用成功,并且整个页面被重新加载 window.reload()

重新加载后,Symfony调试工具栏不会显示任何在上一个“请求”中设置的属性的迹象。我也曾尝试使用Cookies,但没有成功。仍然存在相同的模式。

LaurynasMališauskas

问题已解决,且简短的课程-请勿使用iframe或框架。曾经。

<iframe>和主页具有单独的PHP会话(已检查会话ID)。因此,越野车的过程看起来像这样:

  1. AJAX请求是从发送的 <iframe>
  2. Symfony操作更新<iframe>会话中的属性
  3. 响应200返回,JavaScript重新加载整个页面(window.reload())。
  4. 在页面加载主页上,Session被检查以获取令牌,并且显然那里没有令牌,因此显示了登录表单。

重要的提示!

某些较旧的浏览器或新的浏览器,但安全/隐私设置不太严格,可能会将相同的会话用于主页和<iframe>

这就是为什么我花了这么长时间才找到该bug的主要原因。看起来代码的行为不一致。

删除之后,使用>iframe>该代码就像是一种魅力。

谢谢大家的想法。希望这可以为将来的其他程序员节省一些时间。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

来自同一域上iframe的Symfony3 AJAX请求未保存会话属性

来自分类Dev

appengine 上的 Symfony3 会话失败

来自分类Dev

属性未保存在多个请求的 HTTP 会话中

来自分类Dev

Ajax与Symfony3

来自分类Dev

仅在某些请求上保存用户会话

来自分类Dev

在会话作用域的JSF中请求作用域的属性

来自分类Dev

ajax http请求未在同一域上发送document.cookie

来自分类Dev

处理来自 AJAX 请求的 null 属性

来自分类Dev

Laravel 5.0 Ajax请求保存会话变量

来自分类Dev

在每个POST上返回400错误请求-fosrestbundle,Symfony3

来自分类Dev

带有 symfony3 的 Ajax Jquery

来自分类Dev

使用来自其他域的 api 而不是直接调用同一域的 ajax 有什么好处

来自分类Dev

您请求了一个不存在的服务“file.uploader” - Symfony3

来自分类Dev

您请求了一个不存在的服务“Users_Users”。Symfony3

来自分类Dev

Grails从请求访问未映射到特定域的JSON属性

来自分类Dev

为来自另一个域的每个请求创建一个会话

来自分类Dev

在SSL下显示来自同一域的IFrame

来自分类Dev

可以拦截来自 iframe(同一域)内部的 XMLHttpRequests 吗?

来自分类Dev

电子邮件未存储在来自 ajax 请求的变量中

来自分类Dev

来自另一个页面的会话变量在子域上不可见

来自分类Dev

为什么来自同一计算机缓存的来自不同客户端的两个请求在Cloudfront上未命中?

来自分类Dev

使用PHP在同一服务器上的多个域之间共享会话

来自分类Dev

在ajax请求上未调用before_action

来自分类Dev

Tomcat 7.1为来自同一客户端的每个请求创建新会话

来自分类Dev

Bottle-WebSocket:如何确保HTTP请求与ws连接来自同一会话?

来自分类Dev

标头未与Ajax请求一起发送

来自分类Dev

symfony3树枝和表演会话数组

来自分类Dev

Ajax请求来自不同域的restful api

来自分类Dev

Node.js-服务来自同一服务器上运行的tomcat的请求

Related 相关文章

  1. 1

    来自同一域上iframe的Symfony3 AJAX请求未保存会话属性

  2. 2

    appengine 上的 Symfony3 会话失败

  3. 3

    属性未保存在多个请求的 HTTP 会话中

  4. 4

    Ajax与Symfony3

  5. 5

    仅在某些请求上保存用户会话

  6. 6

    在会话作用域的JSF中请求作用域的属性

  7. 7

    ajax http请求未在同一域上发送document.cookie

  8. 8

    处理来自 AJAX 请求的 null 属性

  9. 9

    Laravel 5.0 Ajax请求保存会话变量

  10. 10

    在每个POST上返回400错误请求-fosrestbundle,Symfony3

  11. 11

    带有 symfony3 的 Ajax Jquery

  12. 12

    使用来自其他域的 api 而不是直接调用同一域的 ajax 有什么好处

  13. 13

    您请求了一个不存在的服务“file.uploader” - Symfony3

  14. 14

    您请求了一个不存在的服务“Users_Users”。Symfony3

  15. 15

    Grails从请求访问未映射到特定域的JSON属性

  16. 16

    为来自另一个域的每个请求创建一个会话

  17. 17

    在SSL下显示来自同一域的IFrame

  18. 18

    可以拦截来自 iframe(同一域)内部的 XMLHttpRequests 吗?

  19. 19

    电子邮件未存储在来自 ajax 请求的变量中

  20. 20

    来自另一个页面的会话变量在子域上不可见

  21. 21

    为什么来自同一计算机缓存的来自不同客户端的两个请求在Cloudfront上未命中?

  22. 22

    使用PHP在同一服务器上的多个域之间共享会话

  23. 23

    在ajax请求上未调用before_action

  24. 24

    Tomcat 7.1为来自同一客户端的每个请求创建新会话

  25. 25

    Bottle-WebSocket:如何确保HTTP请求与ws连接来自同一会话?

  26. 26

    标头未与Ajax请求一起发送

  27. 27

    symfony3树枝和表演会话数组

  28. 28

    Ajax请求来自不同域的restful api

  29. 29

    Node.js-服务来自同一服务器上运行的tomcat的请求

热门标签

归档