我正在开发一个jQuery Mobile Web App,公司将能够向某些用户组发送消息(基于他们的个人资料首选项).
我正在讨论什么是每个用户阅读最新消息时最有效的标记方式.我已经考虑过使用会话来尝试跟踪他们上次打开消息页面的时间,并将其与消息的发布时间进行比较.我还考虑了一个带有message_id和user_id的表,在打开页面时将每个表标记为已读.
我认为两者都有效,但我试图平衡利弊.保留在数据库中将允许我保留历史记录(特别是如果我添加时间戳列以了解他们何时阅读消息),但如果由于表大小而导致应用程序性能受损,则可能不值得它.该应用程序可能拥有成千上万的用户.
我应该提到的一件事是,用户可能会在多个设备上使用该应用程序,并且该应用程序将具有非常长的会话时间,可能允许用户保持登录数月.我喜欢这样的想法:如果他们在一台设备上读取它,那么它会在所有设备上标记它,这可能会使会话难以使用,对吧?
好吧,我会把我在评论中说的所有内容都放到一个可靠的答案中.
简答:您应该使用数据库存储"读取"通知
背后的逻辑:
特别是为什么你不应该使用会话
会话旨在存储临时用户数据(想想ram),他们不应该记录东西.
你不应该保持几个月的会议.它非常不安全,因为它为会话劫持打开了一个更大的窗口.相反,您应该在每次访问应用程序时生成一个新会话,并使用不同的"记住我"cookie或每次进行身份验证.
即使你确实让你的会话持续了几个月,在这几个月之后,用户不会突然得到一个bajillion"未读"的通知吗?
如何将其存储在数据库中
这称为many-to-many关系(从消息角度看)或one-to-many关系(从用户角度看)
表1:消息
ID, message, timestamp
Run Code Online (Sandbox Code Playgroud)
表2:messages_users
ID, user_id, message_id, read
Run Code Online (Sandbox Code Playgroud)
表3:用户
(Do user business as usual)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2980 次 |
| 最近记录: |