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

时间:2016-01-03 16:18:26

标签: php codeigniter session

我想在我的网站中添加基于PHP Codeigniter框架的在线或离线功能。

我找到了这个图书馆OnlineUsers0.2。但是,我已经在使用内置的会话类,我也希望在在线用途上利用它。

我的想法是在ci_sessions表中插入一个具有用户ID的其他字段,当我显示用户信息时,如果它存在于ci_sessions表中,我会根据用户ID对该表进行检查并且last_activity比用户在线时少于5分钟,如果它不存在或last_activity超过用户离线超过5分钟。

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

我的第二个问题是有更好的方法来做我正在寻找的东西吗?

1 个答案:

答案 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