好的,我正在将CodeIgniter用作我正在与我的几个伙伴进行的项目的MVC.我们还使用CI的数据库会话支持.有了这些,我确实知道已经存在“谁在线”的概念,但是这些概念都不能真正满足我们的需求.我们推出的服务是一个独立的SaaS式系统,但是与此同时,我们也允许用户彼此通信.这样,我们就可以让他们与希望共享的人共享特定信息,例如谁何时何地在线,何处等等.因此,我知道CI的会话与IP一样,就像用户登录时一样.
所以我想知道的是,认为我可以利用会话数据的本质,将会话数据库中的ip与登录的ip进行比较,在某种程度上建立我自己的小“谁在线”,这是一个合理的想法吗?特定于通过我们的服务彼此“友好”的人.如果这是一个好主意,那么,对于这种类型的展示,您有何建议作为解决和处理它的方法?我只问是因为我不是100%通过CI进行的会话如何工作,所以我不确定它是否会像我目前想象的那样对我有利.
但是,如果我的想像力消失了,那么解决这个问题的一个好方法是什么?
编辑
登录两台计算机后,我发现数据库中的CI会话具有两个具有相同IP的IP,因此我最初的想法似乎有缺陷.
另外还要感谢Down投票,无论您是谁,您至少可以在评论中说出为什么会感到非常好奇,我想知道如何实现这个想法,但是我无法获得反馈?如果您知道这里的一篇文章或帖子可以为我提供帮助,那么至少可以指出我的意思,因为我的搜索与Im试图在此处解释的内容无关.
解决方法:
基本上,您想检查_ci_sessions表(或您的名字叫什么),以查找last_activity列在当前时间的一定范围内(5分钟,10分钟等)的记录.有了HTTP,就无法知道有人放弃会话的确切时间(除非他们明确注销,并且您自己销毁了会话).您可以使用套接字来完成此操作,但这通常对这样的东西来说是过高的.
在获得“潜在”会话的列表之后,您仍然需要遍历每个会话(请记住要反序列化user_data列!),以找到具有正确userdata键/值的对象,以根据您的需求构成“登录”认证系统.我首先要做的是得到概念证明,然后找到一种方法来缓存几个请求的结果,因为它无论如何都不是请求级别的精确的,您会做得更好,而无需为每个请求增加额外的负担.