我想知道这个已经有一段时间了。我想知道网络论坛实现了突出显示您尚未阅读的内容的选项。论坛怎么知道。
由于大多数网络论坛都具有向您显示自您上次访问以来的所有帖子的功能,因此它们必须将您上次访问其中一个页面的时间保存在数据库中的用户数据中。
但这并不能解释在您只阅读了一个主题之后如何仍然突出显示各个主题。
我想知道这个已经有一段时间了。我想知道网络论坛实现了突出显示您尚未阅读的内容的选项。论坛怎么知道。
由于大多数网络论坛都具有向您显示自您上次访问以来的所有帖子的功能,因此它们必须将您上次访问其中一个页面的时间保存在数据库中的用户数据中。
但这并不能解释在您只阅读了一个主题之后如何仍然突出显示各个主题。
一个多对多表将用户连接到一个主题/帖子,带有阅读/收藏等标志。
许多网络论坛存储了您上次查看每个主题的巨大列表。
这很快就会失控,但有一些缓解措施。请参阅确定论坛中的未读项目
通常,此“未读”项目列表仅显示自您上次注销以来所做的更改。
使用用户的上次活动日期/时间将项目标记为“未读”(该时间之后主题中的任何活动都标记为“未读”)。然后将用户自上次登录后查看的主题 ID 列表存储在 Session 变量中。将这两者结合起来会给你一个相对准确的未读主题列表。
当然,这些数据会在注销或会话到期时丢失,并且循环将重新开始,而不会牺牲不必要的 SQL 查询量。
在我曾经使用过的自定义论坛上,我们使用了您上次访问时间(每次查看另一个页面时更新 - 通常是 cookie)和每个主题上的“标记已读”按钮,该按钮添加了日期/时间值包含您的用户 ID、主题 ID 和日期/时间的 SQL 表。
因此,要查看新主题,我们会查看您的上次访问日期,并且在该时间点之后创建的任何内容都是新主题。
输入主题后,您单击“标记为已读”的任何主题只会显示初始主题,然后在单击标记为已读按钮后添加日期/时间的任何回复。如果您的观众和性能较少,您基本上可以将其设置为在用户单击的每个主题时向表中添加一个条目,当他们单击它时。
跟踪访问者阅读了哪些帖子当然不是什么大不了的事。因为访问者阅读的帖子数量很可能远少于未阅读的帖子数量。因此,如果您知道访问者阅读了哪些帖子,那么您也知道该访问者没有阅读哪些帖子。为了减少计算密集度,您通常只在特定时间段内执行此操作,例如过去两周。在此之前的所有内容都将被视为已读。
您拥有的另一个选项,我实际上已经在 vBulletin 安装中看到过此操作,是在 cookie 中存储以逗号分隔的客户端查看主题 ID 列表。
服务器端,唯一存储的是用户上次访问的时间。论坛系统将此与用户 cookie 中的信息结合使用,以显示任何主题的“已读”,其中
我并不是说这是一个好主意,但我想我会提到它作为替代方案 - 其他答案中已经说明了这样做的明显方法,即将它存储在服务器端作为关系表(多对多桌子)。
我想它确实具有减少保存该信息的服务器负担的优势。
缺点是它与会话相关联,因此一旦开始新会话,在最后一个会话之前发生的所有内容都被视为“已读”。另一个缺点是 cookie 只能保存这么多信息,而用户在一个会话中可能会查看数百个主题,因此它接近 cookie 的存储限制。
另一种方法:
但是,要使其工作,您需要有一致的主题 URL,而大多数论坛系统并不倾向于这样做。另一个缺点是用户可能会清除他们的历史记录,或使用多个浏览器。因此,这将这项措施归入“不高度可靠的类别”;您可能会这样做以增加您用于跟踪查看主题的任何其他措施。