检查用户是否在线,Codeigniter框架


Check if a user is online, Codeigniter framework

我想在我的网站中添加在线或离线功能,它是基于PHP Codeigner框架构建的。

我在OnlineUsers0.2上找到了这个库。但是,我已经在使用内置的会话类,我也想在网上使用它。

我的想法是在ci_sessions表中插入一个具有用户id的其他字段,当我显示用户信息时,如果用户id存在于ci_sessions表中,并且last_activity比用户联机时间短5分钟,如果不存在,或者last_activity比用户脱机时间长5分钟,我会根据用户id对该表进行检查。

所以,我的第一个问题是如何将user_id字段添加到ci_sessions表中,这是一个好方法吗。

我的第二个问题是,有没有更好的方法来做我想要的事情?

在回答第二个问题时,您可以轻松地使用javascript websocket实时执行此操作。您也可以使用相同的逻辑进行长轮询,但如果您的应用程序有很多用户,这不是一个好方法。

实时在线功能只需在用户表中创建一列"is_online",然后编写一个函数来更新数据库中的is_onle状态标志。

使用创建websockets-php服务器http://socketo.me/或https://github.com/nekudo/php-websocket。您的服务器逻辑将驻留在这里,即如果用户联机,则更新联机标志,反之亦然。

在使用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