【发布时间】:2009-05-20 06:32:16
【问题描述】:
我一直在为我的网站创建一个简单的论坛。我正在添加一项功能,该功能将标记自您上次访问以来的未读帖子和论坛。
我实质上是用每个用户帐户存储上次访问论坛的日期。当用户返回站点时,将运行查询以获取所有 post_id 和 post_parent_forum 值,然后将其添加到数组中,该数组存储在 SESSION 变量中,键为 post_id(唯一)和值作为论坛 ID(这不会是唯一的,因为帖子会出现在少数论坛中)。
在论坛索引中,我对每个论坛使用in_array(),查看forum_id是否在数组中,如果在则标记为“未读”。
在线程列表中,我使用 array_key_exists() 来查看每个线程 ID 的键是否在数组中,如果是,则标记为“未读”。
当查看帖子时,该项目将从数组中删除,其键等于线程的 ID。
这种方法是否合理,或者如果论坛变得更受欢迎,我会遇到问题吗?我担心在每个论坛列表上运行 20 个 array_key_exists() 检查。它相当快吗?
附带说明....我可以直接使用 SESSION 存储数组,还是必须将其值分配给常规变量,删除一个键,取消设置旧会话 var,然后重新设置它更新后的数组?
【问题讨论】:
-
如果用户登录、注销然后重新登录,这会起作用吗?那不是所有帖子都标记为“已读”吗?
-
否,因为他们上次访问的时间戳仍会保存在他们的帐户中。所以只有自上次访问后添加的项目(在此示例中为 1 分钟或更短时间)。
-
我假设,“自您上次访问以来”是指自您上次成功登录(当前登录之前的一次)以来,而不是最后一次页面刷新。
-
最后一次刷新,因为我想在访问期间创建的数组中添加新线程。