Php 如何在comet中刷新会话?
我想在我的页面上有一个类似comet的iframe,但是当会话更改时,iframe中的信息不会更改,我在iframe中转储了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
$\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);
}
?>