2

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

我注意到,如果会话未启动,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 调用没有收到(我没有接听)。这意味着用户需要单击两次才能收到正确的答案(弹出一个例子)

谢谢!

4

2 回答 2

3

问题似乎是您没有调用session_start()if$_COOKIE['PHPSESSID'] 设置,因此会话没有为当前的 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()它们最初加载的主脚本。

于 2012-10-09T13:24:21.717 回答
3

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

于 2012-10-09T13:36:48.720 回答