Php 如何在comet中刷新会话?

Php 如何在comet中刷新会话?,php,jquery,session,comet,Php,Jquery,Session,Comet,我想在我的页面上有一个类似comet的iframe,但是当会话更改时,iframe中的信息不会更改,我在iframe中转储了$\u session变量,它没有更改 我的问题是,当客户端会话更改时,如何更新comet iframe中的会话变量 非常感谢^_^ 使用代码更新: 客户: <?php session_start(); if(!isset($_SESSION['count'])) $_SESSION['count'] = 0; ?> <!DOCTYPE H

我想在我的页面上有一个类似comet的iframe,但是当会话更改时,iframe中的信息不会更改,我在iframe中转储了
$\u session
变量,它没有更改

我的问题是,当客户端会话更改时,如何更新comet iframe中的会话变量

非常感谢^_^

使用代码更新:

客户:

<?php
    session_start();
    if(!isset($_SESSION['count'])) $_SESSION['count'] = 0;
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Test Comet</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script type='text/javascript' src='../js/jquery.js'></script>
    <script type="text/javascript">
        function test_function(msg){

            $('p').html(msg)

        }

        $('div').click(clickMe);

        function clickMe(event){
            $.ajax({
                url: 'addSess.php'
            })
        }
    </script>
  </head>
  <body>
      <p>This is a test</p>
      <div>click me</div>
    <iframe src="output.php" width="0" height="0" style="display: none;"></iframe>
  </body>
</html>

试验彗星
功能测试功能(msg){
$('p').html(msg)
}
$('div')。单击(clickMe);
功能clickMe(事件){
$.ajax({
url:'addSess.php'
})
}
这是一个测试

点击我
comet iframe(output.php):


只要您对
$\u会话
进行更改,所有内容都会重新加载到执行
变量转储($\u会话)的iframe应该可以看到新会话。你正确使用了吗

请使用一些代码进行更新,我们将看看如何提供帮助

更新

首先,您的comet页面需要
设置时间限制(0)
因此它可以无限期运行(连接仍然会被切断,您需要做一些事情来重新启动comet连接)

其次,输出缓冲可能会给您带来错误,从这个意义上讲,PHP是不可靠的,我的本地测试无法使用您的代码,因为它。如果我添加该行:

<iframe src="output.php" width="0" height="0" style="display: none;" onload="alert('Iframe Loaded');"></iframe>
需要在加载HTML DOM后调用。尝试:

$(function(){
    $('div').click(clickMe);
});
也应考虑将彗星代码更改为:

<?php
session_start();
ob_implicit_flush(true);
ob_end_flush();
echo 'hello';
while(true){
    echo "<script>window.parent.test_function('".time().' session: '.$_SESSION['count']."');</script>";
    sleep(1);
}
?> 

有两件事不对:-?更新*我的帖子。@Khez。问题是,我在客户端看到time()更新,但在会话中看不到。它会慢慢地从我的车上卸下任何其他负载site@Khez,您的第二次更新仍然不起作用,是的,它会立即注册单击,但会话显示编号不会更改,而且我在加载其他页面时仍然存在问题。这是由于会话启动()的工作方式造成的。查看我更新的帖子。不能有两个页面具有相同的会话id调用会话启动();您在Web服务器上有两个不同的选项卡,一个必须完成,另一个才能启动。@Khez那么您能告诉我如何在我的实现中使用session_destoy和session_id吗?
$('div').click(clickMe);
$(function(){
    $('div').click(clickMe);
});
<?php
session_start();
ob_implicit_flush(true);
ob_end_flush();
echo 'hello';
while(true){
    echo "<script>window.parent.test_function('".time().' session: '.$_SESSION['count']."');</script>";
    sleep(1);
}
?>