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

如果(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 
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();
}

?>   

给TA打赏
共{{data.count}}人
人已打赏
未分类

Haskell类型演绎问题

2022-9-23 1:50:17

未分类

将每个按钮下面设置成一个面板

2022-9-23 1:50:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索