如果(session)用户已登录,如何使用flush()?- 实时通知

问题描述 投票:0回答:1

如果(session)用户已登录,如何使用flush()?

我尝试使用下面的代码来检查用户登录时的通知,但有一个问题:如果我使用session,Flush不工作。to = '$iam' and $iam is user id.

<?php 
session_start();//Start session
ob_start();
include("../system/connect.php");
header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");//It means don't use session, so it's almost oposite of session_start();
if(isset($_SESSION['user'])){
$iam=$userRow['user_id'];
$id=int($_GET['id']);
if($id>=1){
$result = mysqli_query($con, "SELECT * FROM `notification` WHERE `to` = '$iam' `seen` = '1' order by `id`");
$c=mysqli_num_rows($result);

echo "data: " . $c . "\n\n";// Send it in a message
flush();
}
}
?>

还有一个更简单的方法,也是太有可能了:我可以用$_GET['i']作为用户id,但这样一来,用户就可以计算另一个用户的通知,这只是一个bug。

include("../system/connect.php");
header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
$iam=int($_GET['i']);
$id=int($_GET['id']);

if($id>=1){
$result = mysqli_query($con, "SELECT * FROM `notification` WHERE `seen` = '1' order by `id`");
$c=mysqli_num_rows($result);


echo "data: " . $c . "\n\n";   // Send it in a message
flush();
}

?>

总之,我需要第一种方式的正确形式,请帮我。

php mysql notifications flush
1个回答
0
投票

已解决

<?php 
include("../system/connect.php");
header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
session_start();
ob_start();
ob_flush();
if(isset($_SESSION['user'])){ 
$iam=$_SESSION['user'];//Query replaced with SESSION
$result = mysqli_query($con, "SELECT * FROM `notification` WHERE `to` = '$iam' and `seen` = '1' order by `id`");
$c=mysqli_num_rows($result);
echo "data: " . $c . "\n\n";// Send it in a message

flush();
}

?>   
© www.soinside.com 2019 - 2024. All rights reserved.