PHP / JQuery WebApp共享公共文件跨子域

时间:2012-09-14 09:02:40

标签: php jquery ajax cross-domain same-origin-policy

我的第一篇文章 - 首先要说的是这个网站很棒 - 它帮了我很多次,没有我不得不问一个问题。直到现在!

我运行使用PHP / MySql / JQuery构建的webapp - 绝对使用JQuery AJAX加载/发布所有内容 - .load()和.post() 我有许多使用此webapp的不同客户,所有客户都使用以下格式的sumdomains:client1.example.com,client2.example.com,而example.com是广告页面。

当我的客户端很少时,我会复制文件 - 例如,client1的所有必需文件都在文件夹example / client1 /中,而客户端2则会在示例/ client2 /中获得完全复制的文件 随着我的客户数量的增长,我改变了结构,以便客户共享公共文件 - 现在AJAX调用将从文件夹/ example / client1转到/ example

这很好用,因为每个客户端子域都被重定向到实际文件夹 - 例如client1.example.com被重定向到example.com/client1 这种重定向是必要的,因此AJAX调用不会因浏览器的同源策略而失败。

这导致的问题是不同客户端之间的普通用户能够通过在登录后更改其URL来查看来自其他系统的信息,例如从example / client1到example / client2,因为PHP会话不是独占的 - 每个客户被认为是在同一个域 - example.com 要解决这个问题,可以使用没有重定向的子域 - 因为这样PHP会话就是独占的 执行此操作会导致对父文件夹的所有AJAX调用因同源策略而失败。 :(

我研究了这个跨域AJAX请求问题并尝试了许多不同的解决方案:

1)使用iFrame进行隧道 - 父文件夹中的AJAX对象 - AJAX调用成功 - 但PHP会话出现同样的问题 - 域被视为example.com而不是client1.example.com

2)设置document.domain = example.com的诀窍 - 似乎不起作用 - 这是一个过时的旧解决方案我认为

3)设置PHP标头 - 标头('Access-Control-Allow-Origin:'。$ _ SERVER ['HTTP_ORIGIN']); 根本不起作用

我不想为ajax调用使用任何不同的库。

目前,我提出了两种选择:

1)使用为每个客户端复制文件的旧方法,我宁愿不这样做,因为它浪费空间并使更新文件变得痛苦 - 我必须更换许多文件而不是仅仅1。

2)在每个客户端目录中使用PHP基本文件,该目录将接收所有AJAX调用,然后从父文件夹中包含所请求的文件。我已经测试了这个并且看起来效果很好 - 所以这是我选择的选项,除非那里有人有更好的解决方案吗?
详细说明这个选项:
假设我从子域中的页面发布:http://client1.example.com
而不是调用$ .post'(http://example.com/file.php'); (会失败)
我叫$ .post('http://client1.example.com/base.php', {target:'file.php'})
然后从base.php只包括('../'.$_ REQUEST ['target'])

我很高兴选择2,但它只是让我怀疑有更好的方法吗? * 其他人遇到过类似问题吗? *

干杯! Ĵ

2 个答案:

答案 0 :(得分:0)

您是否尝试使用跨域xml

答案 1 :(得分:0)

更新

所以我选择了2 - 在所有AJAX请求调用的子域中创建一个基本文件,然后这个基本文件使用PHP包来获取实际的目标文件。

非常好用,非常适合轻松重构文件系统。从现在开始将对所有未来项目使用此方法!