1

我正在创建一个要包含在托管网页中的小部件(使用 PHP 和 jQuery),实际上我有点卡住了,因为我在下面描述了这两个问题:

  1. 在我的小部件中,有一些命令应该对 php 脚本执行 AJAX 调用以检索数据,但我总是遇到 access-Control-Allow-Origin 错误,最初我以为我解决了这个问题,将这一行放在 php 中: header("Access -Control-Allow-Origin: *"); 但它直到现在只在 Firefox 上工作,Chrome 仍然拒绝给我 php 输出

  2. 总是在谈论 AJAX 调用:用户执行启动这些调用的选择,我想跟踪用户的选择。我想用 PHP 使用会话。这里的问题是任何呼叫似乎都有不同的 session_id ......有什么想法吗?

提前致谢

4

3 回答 3

2
  1. 看看JSONP
  2. 您可以从 javascript 生成(可能得到?)用户 ID,然后将其与请求一起发送。

您的问题 #2 的解释:PHP 会话使用 cookie 和 GET 参数。PHP 生成会话 ID 并将其放入 cookie 或 GET 字符串。然后,当请求返回时,它会读取 cookie(GET 参数)并知道要获取哪些会话。在您的情况下,您从原始页面(不是您的域)获取 cookie,因此没有会​​话 id(属于您的服务器),并且您的服务器除了生成新页面外无事可做。

作为一个选项,您可以考虑嵌入您的小部件,iframe它将解决您的所有问题,包括同源和会话处理。

于 2012-09-03T16:40:28.250 回答
1

为了将纯 AJAX 与 jQuery/JavaScript 一起使用,您可能需要考虑查看如何随请求生成 cookie。cookie 只是作为与您的请求一起发送的标头的一部分添加的,您需要做的就是将当前用户的会话 cookie 注入到任何 AJAX 请求中,以确保用户仍然被认为是相同的您的小部件将在后台向其他脚本发出的每个请求的用户。自从我对这些类型的请求使用 jQuery/JavaScript 以来已经有一段时间了,但我相信有一种方法可以在发送请求之前将标头添加到请求中。您可能需要为标题制作原始 cookie,但简单的 Google 搜索应该会显示您需要的格式。

于 2012-12-16T15:17:38.160 回答
0

我想回答我的问题,只是为了帮助遇到同样麻烦的人。

如果不是必须使用 Javascript/Jquery 来实现您的小部件,我发现将您的小部件实现为 Adob​​e Flash swf 应用程序将解决上述所有问题。

使用 AS3,您可以对 php 文件执行远程 Http 请求。并且所有请求都将作为单个会话进行跟踪。Access-Control-Allow-Origin 没有问题。

domainhost.com 可以加载到标签 domain1.com/widgetflash.php 然后页面内加载的 widget.swf 可以执行远程请求,如下所示:

urlRequest= new URLRequest("http://www.example.com/source/setChoice.php");
_urlLoader = new URLLoader(); 
_urlLoader.addEventListener(Event.COMPLETE, onXMLDataLoaded, false, 0, true);
_urlLoader.load(urlRequest);
于 2012-09-04T13:59:30.447 回答