【问题标题】:file path structures ajax and php sessions文件路径结构 ajax 和 php 会话
【发布时间】:2012-05-20 20:46:44
【问题描述】:

我正在做一个到处都是的项目。我的显示文件是 index.php。从那里我通过 jquery 调用 ajax 函数,然后调用 php 文件从 mysql 表中获取和接收用户数据。 php 函数将一些数据保存到 php 会话变量中,有时只是将数据返回给 ajax。

我对 ajax、php 和大部分会话都很陌生,我发现我在制作文件路径的方式上可能有问题......例如,我发现有时使用完整的 URL 文件路径而不仅仅是 /functions/updateUser.php 可以破坏链接!

所以我的问题是,服务器究竟是如何通过 php 会话传递变量的?

如果我的文件结构如下,这会产生问题吗?我的第二个问题是文件结构是否也会影响 ajax 数据的返回方式?

根> index.php
根 > session.php
根 > 函数 >(调用数据库的 php 文件)
根目录 > 脚本 >(调用 php 函数的 js 文件)

我已经搜索了可以帮助我更清楚地理解(和心理图景)这些信息如何在页面之间传递的教程,但没有找到任何东西!

【问题讨论】:

    标签: php javascript jquery mysql session


    【解决方案1】:

    你只要解决一个有趣的问题,你就必须把它做对。

    回答您的问题:

    1) $_SESSION 用于在您的应用程序中构建持久行为,这意味着您可以跨请求传递数据。 所有可以序列化的东西,序列化为字符串,写入文件。当请求时,数据会从该文件中反序列化并重建到 $_SESSION 数组中。 More about the sessions here

    2) 不,只要您返回一个具有正确 Content-Type 等的有效字符串(来自您的 PHP 脚本)。“ajax 数据”只是从您的 PHP 脚本中回显的字符串。在回显之前正确设置标题例如:header('Content-Type: text/javascript');

    关于内容类型的说明:这取决于你想在另一边实现什么。如果您使用 jQuery 并使用它构建客户端逻辑,那么您可能想要发送 JSON。在这种情况下,我建议将您的内容类型设置为“text/javascript”,而不是“正确”类型,即“application/json”。我曾经在使用 Internet Exploder 和 Firefox 时遇到很多问题,浏览器会与 application/json 混淆。 它总是按预期使用“text/javascript”,这很好,因为 JSON 是 javascript(符号)。

    有一个很好的 ini 指令“include_path”,您可以根据自己的特定需求进行调整。有用的函数是set_include_path()get_include_path()。只有这两个你才能创造奇迹。

    PHP 中的文件按“include_path”指令中的顺序包含。 为了使其在包含/要求文件时更加灵活,请考虑 3 种最常用的做法:

    1. 用你的文件结构设置你的 include_path
    2. 构建一些精美的自动加载器(参见spl_autoload 功能)
    3. 仅限 5.3+,使用命名空间

    现在include_path 不那么受欢迎了,因为每个人都倾向于用“适当的方式”和其他蹩脚的借口来吹嘘事情。如果您不构建另一个 Facebook、Twitter 或 Youtube-wannabe 应用程序,请考虑 include_path。它很简单,而且功能非常强大(而不是使用臃肿的技术)。

    规划你的结构,并像这样添加你的目录:

    <?php
    // somewhere at the very top of your entry script
    set_include_path(implode(PATH_SEPARATOR, array_merge(array(
        '/path/to/app/dir1',
        '/path/to/app/dir2',
        '/even/path/outside/your/app',
        // ...
    ), explode(PATH_SEPARATOR, DEFAULT_INCLUDE_PATH))));
    ?>
    

    这会将您的 php.ini 文件 (DEFAULT_INCLUDE_PATH) 中设置的当前路径与您的路径结合起来。

    现在,当您包含/需要某些脚本时,它会尝试按此列表的顺序包含它。

    抱歉,解释太长了。希望它有所帮助;)

    【讨论】:

      【解决方案2】:

      您的文件结构很好,与任何编码问题无关。

      进行 AJAX 调用时,您调用的是 URL,因此完整的 URL 是可以的。但是,在调用您的函数时,您实际上包含了一个预期驻留在服务器文件夹中的文件,因此调用需要与您的调用文件的位置相关,而不是 URL。

      会话

      当您调用 session_start() 时,它会生成一个 cookie 并将会话 ID 存储在客户端浏览器中。因此,任何配置为拒绝 cookie 的客户端浏览器都将无法使用会话。当您设置会话变量时,服务器会将其存储在服务器上会话文件中的会话 ID 文件中。当您的程序从会话请求一个值时,PHP 会在该会话文件中检查该变量并返回该值。这个想法是保存在会话文件中的大数据会使服务器变慢,并且不是理想的编码方式。在您的程序中,您可以查看 jQuery,以及 jQuery 中的几行代码如何提升您的程序以利用 AJAX 和 JSON 非常有效地发送和接收大量数据。

      更多关于 PHP Session 的信息是here

      jQuery AJAX 信息为here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-27
        • 2023-03-25
        • 2011-08-03
        相关资源
        最近更新 更多