【发布时间】:2011-11-06 03:46:23
【问题描述】:
我正在使用 Symfony 1.3 编写一个网络应用程序。通过 jQuery 的 $.ajax() 调用调用操作后,我的会话变量丢失了问题。事情按以下顺序发生:
-
一个动作像这样设置会话变量:
$this->getUser()->setAttribute('uploaded-files', $uploadedFiles); -
然后当动作调用视图组件时,生成的 HTML 页面包含以下调用:
$.ajax({ type: "POST", url: '<?php echo url_for("content/merge"); ?>', cache: false, success: mergingCompleteCallback }); -
我单击触发上述 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