【问题标题】:Create the session during ajax call (php-xajax)在 ajax 调用期间创建会话 (php-xajax)
【发布时间】:2012-10-09 13:02:15
【问题描述】:

除非完全必要,否则我需要避免在应用程序中创建会话。

我注意到,如果会话未启动,xajax 调用将无法正常工作:(。我的第一种方法是在 xajax 函数开始时创建会话(如果它不存在),但是,它没有用户第一次调用调用时不工作(自会话创建后第二次工作)。

有什么方法可以处理/修复这种情况?

编辑:示例代码:

function example ($parameters) {
    if (!isset($_COOKIE["PHPSESSID"])) {
        session_start(); // we create the session if it didn't exist previously 
    }
    $response = new XajaxResponse();
    .....
    return $response;
}

我的想法是在用户进行 ajax 调用时创建会话。在这种情况下,我第一次调用“示例”函数时它不起作用。第二个没问题,我认为是因为会话已创建。

编辑:您好,我注意到 chrome 和 explorer 下存在问题 :(。第一个 ajax 调用没有收到(我没有接听)。这意味着用户需要单击两次才能收到正确的答案(使用例如弹出窗口)

谢谢!

【问题讨论】:

  • 您需要发布您的代码。每当您第一次调用 session_start() 时,都会创建 PHP 会话,无论是由 AJAX 请求发起还是由浏览器发起的正常静态请求。
  • 谢谢,我添加了一个更详细的示例

标签: php session xajax


【解决方案1】:

问题似乎在于如果设置了$_COOKIE['PHPSESSID'] ,您没有调用session_start(),因此会话没有为当前的ajax初始化要求。您必须在每个使用会话的脚本上调用session_start()——它不仅仅是用于会话初始化。

function example ($parameters) {
    // If this function uses the session, you MUST call session_start()
    // Don't do it conditionally.
    session_start(); 

    $response = new XajaxResponse();
    .....
    return $response;
}

如果您的所有 ajax 处理函数都使用会话,那么您不妨在包含它们的文件顶部调用 session_start()。如果您不希望在 ajax 调用之前加载会话,则将它们隔离到它们自己的 PHP 脚本中,而不要在它们最初加载的主脚本上调用 session_start()

【讨论】:

  • 非常感谢!!,是的,你是对的。我必须隔离会话开始。
  • 你好,我注意到 chrome 和 explorer 下的一个问题 :(。第一个 ajax 调用没有收到(我没有接听)。比男士用户需要点击两次才能正确接收回答(例如弹出窗口)
  • @yauros 您需要使用 Chrome 开发者控制台查看 AJAX 请求并查看发生了什么或错误。我无能为力,尤其是发布了这么少的代码。 (但不要在这里发布更多内容 - 这应该是一个新问题)
  • 谢谢,我会创建一个新帖子
【解决方案2】:

对于会话,您必须重新加载页面而不重新加载页面会话无法创建..... 并且 Ajax 对于不重新加载整个页面很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-24
    • 2013-12-05
    • 2013-01-12
    • 2021-06-27
    • 2016-06-21
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多