在ajax调用期间创建会话(php-xajax)

时间:2012-10-09 13:02:15

标签: php session xajax

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

我注意到如果会话未启动,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和资源管理器下的问题:(。第一个ajax调用没有收到(我没有回答)。比意味着用户需要点击两次才能收到正确答案(与例如弹出窗口)

谢谢!

2 个答案:

答案 0 :(得分:3)

如果session_start() 设置为<{1}} ,那么 调用$_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()

答案 1 :(得分:3)

对于会话你必须重新加载页面而不重新加载页面会话无法创建..... 如果不重新加载整个页面,Ajax非常有用。