【发布时间】:2016-07-26 01:04:57
【问题描述】:
我目前正在开发一个聊天系统,只是为了提高自己作为一名程序员的能力,因为我还很年轻 (17)。当用户登录时,消息“{user} 已进入聊天。”在聊天中显示。同样,当用户注销时,“{user} 已离开聊天”消息。显示出来。
这两个功能都可以正常工作。但是,我还想确定用户何时关闭页面(留言)以及何时回来(输入留言)。
为了在一定程度上做到这一点,我做了以下事情:
1、在主聊天页面(chat.php)上,我设置了一个名为onpage的会话
2、当用户离开页面时,以下脚本将通过AJAX(jQuery)在onbeforeunload事件中运行:
//setoffline.php
unset($_SESSION["onpage"]); // unset the session
if ($_POST['logout'] == "false") { // in our case, this will evaluate true
sleep(3); // halt the script for 3 seconds
if (isset($_SESSION["onpage"]) || !empty($_SESSION["onpage"]))
die();
}
}
// if continued, send the offline message
...
$_SESSION["left"] = "true";
3,脚本运行,然后休眠三秒钟,然后检查会话是否仍然存在(如果用户在三秒钟内返回,会话将被重置)。如果没有则:脚本将完成,将发送留言,并设置会话left。
4,当用户返回时,会触发一个 onload 函数来检查会话left。如果设置了,则发送回车消息,会话left 将被取消设置。
问题:
到目前为止,我确信您已经发现我的算法存在问题。我自己也看到了很多问题。一方面,使用sleep 函数似乎不正确,也不能正常工作。关闭页面时它可以正常工作(因为没有人在 3 秒内返回),但是当您刷新时,它会导致页面停止三秒钟,这是我不想要的。我只是想要一种方法来识别用户何时正式离开并共轭返回页面。
【问题讨论】:
-
您知道每个用户都有自己的会话吗?
-
这不是问题。如果用户关闭页面,每个用户都有自己的会话这一事实如何帮助通知我用户已离开聊天? @delueg
-
当有新的聊天消息进来时如何更新浏览器?某种投票?也许轮询数据还可以返回登录聊天的用户列表。然后你可以查看哪些人离开了聊天。 (使用 onbeforeunload 发送命令将用户注销或将其标记为已离开聊天)。
-
我使用服务器发送的事件来不断地从服务器接收我的数据。如果刷新时不触发 onbeforeunload,这个想法会很好。这是因为如果用户刷新,它会创建一个
leavingmessage 和entering消息以立即返回聊天,使聊天非常难看。这就是为什么我考虑使用 sleep 函数来等待用户返回的原因,但这不起作用。 @KyleRidolfo -
一般来说我的脚本是有效的。唯一的问题是刷新按钮也会触发onbeforeunload
标签: javascript php jquery ajax session