【问题标题】:PHP / JQuery WebApp sharing common files cross subdomainPHP/JQuery WebApp 跨子域共享通用文件
【发布时间】:2012-09-07 10:13:28
【问题描述】:

我的第一篇文章 - 首先必须说这个网站很棒 - 它帮助了我很多次,而我无需提出任何问题。直到现在!

我运行一个使用 PHP / MySql / JQuery 构建的 web 应用程序 - 绝对所有内容都使用 JQuery AJAX 加载/发布 - .load() 和 .post() 我有许多不同的客户端在使用这个 webapp,它们都具有以下形式的 sumdomains:client1.example.com、client2.example.com,而 example.com 是广告页面。

当我的客户端很少时,我会复制文件 - 例如,客户端 1 的所有必要文件都在文件夹 example/client1/ 中,而客户端 2 将在 example/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 标头 - header('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 很满意,但这只是让我想知道有没有更好的方法? *还有其他人遇到过类似的问题吗?*

干杯! J

【问题讨论】:

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


    【解决方案1】:

    您是否尝试过使用跨域 xml

    【讨论】:

    • 从未听说过。只是快速阅读它 - 我怀疑它会有所作为,因为如果不满足同源策略要求,浏览器根本不会发送 ajax 请求 - 这些 ajax 请求/浏览器对跨域一无所知.xml 文件
    【解决方案2】:

    更新

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

    效果很好,非常适合轻松重组文件系统。从现在开始将在所有未来的项目中使用这种方法!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-27
      • 2020-01-04
      • 2018-05-04
      • 2012-03-29
      • 1970-01-01
      • 2021-07-18
      • 2013-02-13
      • 1970-01-01
      相关资源
      最近更新 更多