2010-02-25 79 views
0

我有一个ajax长轮询请求,在首页加载时工作正常。问题是当页面重新加载或浏览新页面时,PHP会话被锁定,直到旧的PHP会话超时。PHP会话锁定了ajax长轮询

我有以下的长轮询代码...

while (time() - $time < 55) { 

    if ($userid != 0) { 

    updateUserSession(); 
    fetchMessages(); 
    getTyping(); 
    //getNotifications(); 

    if (!empty($response)) { 

    header("Content-Type: text/plain"); 
    echo json_encode($response); 
    exit; 
    } 

    } 

    sleep(2); 
} 

我在顶部的session_start。

现在,问题是getTyping函数可能需要设置会话,所以在完成长轮询请求之前无法调用session_write_close,所以我不能只获取会话数据,然后立即关闭会话数据。

任何人都可以想到解决这个问题的方法吗?

谢谢。

回答

0

您是否每次需要访问会话时都可以调用session_start()和session_write_close()?我猜你可能会发送重复的标题,但这可能不是问题。

编辑这是行不通的,因为你不能调用session_start(),一旦你已经发送任何内容到浏览器

+0

我甚至没有尝试,我还以为你只能启动一个会话一次? – Chris 2010-02-25 13:27:12