我想在我的网站中添加基于PHP Codeigniter框架的在线或离线功能。
我找到了这个图书馆OnlineUsers0.2。但是,我已经在使用内置的会话类,我也希望在在线用途上利用它。
我的想法是在ci_sessions
表中插入一个具有用户ID的其他字段,当我显示用户信息时,如果它存在于ci_sessions
表中,我会根据用户ID对该表进行检查并且last_activity
比用户在线时少于5分钟,如果它不存在或last_activity
超过用户离线超过5分钟。
所以,我的第一个问题是如何将user_id
字段添加到ci_sessions
表中,这是一个很好的方法。
我的第二个问题是有更好的方法来做我正在寻找的东西吗?
答案 0 :(得分:1)
回答第二个问题,您可以轻松地使用javascript websockets实时执行此操作。您也可以使用相同的逻辑进行长时间轮询,但如果您的应用程序有很多用户,那么这不是一个好方法。
实时在线功能 只需在users表中创建一个列'is_online',然后编写一个函数来更新数据库中的is_online状态标志。
使用http://socketo.me/或https://github.com/nekudo/php-websocket创建您的websockets php服务器。在这里你的服务器逻辑将驻留,即如果用户上线更新在线标志,反之亦然。
在使用websockets的javascript中,您可以简单地挂钩onopen和onclose事件来执行触发服务器端功能。当用户点击您的任何页面时,只需更新数据库中的状态即可。
function WebSocketTest()
{
if ("WebSocket" in window)
{
alert("WebSocket is supported by your Browser!");
// Let us open a web socket
var ws = new WebSocket("ws://localhost:9998/echo");
ws.onopen = function()
{
// Web Socket is connected, send data using send()
ws.send("Message to send");
alert("Message is sent...");
};
ws.onclose = function()
{
// websocket is closed.
alert("Connection is closed...");
};
}
else
{
// The browser doesn't support WebSocket
alert("WebSocket NOT supported by your Browser!");
}
}
进一步参考http://www.tutorialspoint.com/html5/html5_websocket.htm