【问题标题】:Symfony, jQuery.ajax() call, session variables lostSymfony,jQuery.ajax() 调用,会话变量丢失
【发布时间】:2011-11-06 03:46:23
【问题描述】:

我正在使用 Symfony 1.3 编写一个网络应用程序。通过 jQuery 的 $.ajax() 调用调用操作后,我的会话变量丢失了问题。事情按以下顺序发生:

  1. 一个动作像这样设置会话变量:

    $this->getUser()->setAttribute('uploaded-files', $uploadedFiles);
    
  2. 然后当动作调用视图组件时,生成的 HTML 页面包含以下调用:

    $.ajax({
      type: "POST",
      url: '<?php echo url_for("content/merge"); ?>',
      cache: false,
      success: mergingCompleteCallback
    });
    
  3. 我单击触发上述 ajax 调用的按钮。该调用执行相应的操作方法,但是当我打印出“上传文件”会话变量的内容时,它是空的。

    我还检查了在调用设置变量的页面和读取变量的页面(ajax 调用)之间会话 id 是否保持不变,并且会话 id 没有改变。我在网上搜索了几个小时,但找不到解决方案。

【问题讨论】:

  • 您是如何打印出内容的,内容是什么?由于 ajax 请求使用与任何其他请求相同的会话 cookie,因此您的会话变量没有理由会在 Ajax 而不是常规请求中丢失。
  • 嗨。 AJAX 调用只是通过回调返回文件的路径。 URL 请求调用一个调用系统调用 pdftk(一些参数)的操作,然后返回一个带有文件名路径的回调。我遇到的问题是位于 url_for("content/merge") 的操作看不到会话变量 ($this->getUser()->getAttribute('attr_name');)。但是,当我通过直接在浏览器中键入 URL 来运行此命令时,因此不使用 AJAX,会话变量会正确加载。这就是让我感到困惑的地方。我期望您描述的相同行为。谢谢!
  • 可能你的会话cookie是httponly,这种情况下jquery不能发送。
  • url_for("content/merge") 是返回相对 URL 还是绝对 URL?如果是绝对的,请尝试将其降低为相对。
  • 在你的帖子请求中我没有看到uploaded-files 变量,你在哪里设置它?检查 XFR 请求的标头以确保 ajax 按预期发送它们。

标签: jquery ajax session symfony1


【解决方案1】:

我遇到了类似的问题,问题是我使用主机值来存储带有“www”即 www.mydomain.com 的 cookie,而我在没有“www”的情况下发出 Ajax 请求

解决方案是使用通配符,如主机。 像 .mydomain.com 作为您的主机在浏览器端存储会话 cookie。

只要确定你不是这件事的受害者?

【讨论】:

  • 那不能解决我的问题!我不知道你为什么赢得了赏金,但谢谢你的回答!
【解决方案2】:

您还可以将会话值添加到调用本身,这样您就不必在 AJAX 调用中获取它。它有点hacky,但它会起作用。

您在开发栏中看到会话变量了吗?可能是缓存吧,我以前也遇到过这样的缓存问题。

【讨论】:

  • 全局会话变量仅在重新加载页面后显示。用户会话也显示但已锁定。我无法更改用户会话中的值。
猜你喜欢
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
  • 2011-12-05
  • 2011-03-09
  • 2012-10-18
  • 2012-01-10
  • 2020-01-09
相关资源
最近更新 更多