我在我的一个PHP / MySQL网站上有一个简单而通用的内部消息服务,具有唯一的messageID
,from
,to
,subject
,{{ 1}},message
和time
。
一般来说,检查用户是否有新邮件的最佳方法是什么?
我应该在主Users表上存储一个简单的二进制触发器,当有人向他们发送消息时,它会切换到1,然后让用户在每个页面加载时检查该1,如果有,则提醒他们新邮件(并在他们进入收件箱时将其设置为0)?但是如果它是垃圾邮件并且我们在用户阅读之前将其删除了呢?
或者我应该存储用户阅读的最后一条消息的isRead
,然后检查最新消息,看看它是否比他读过的最后一条消息更新,如果是这样警告他?但那么我应该如何以及在哪里存储这些信息?
考虑到我们必须在每个页面加载上检查新消息,还有另一种更有效的方法吗?
如果用户进入他的收件箱,则不应再向他显示他在检查收件箱时收到的任何邮件都有“新邮件”,无论他是否真的点击过来阅读或不。
谢谢!
编辑:我的一些用户从没有cookie甚至是Javascript的非常基本的手机访问我的网站,所以请记住这一点。
答案 0 :(得分:1)
最好的方法是使用html套接字从服务器推送通知,就像stackoverflow一样。
但请记住,所有浏览器都不支持,因此需要回退到ajax轮询。
关于垃圾邮件我建议只在垃圾邮件检查完成后通知用户,如果可能的话。
你的解决方案存储在用户旁边,设置位听起来是正确的,(你也可以存储新消息的数量,而不是位)
答案 1 :(得分:0)
在您的用户表中,存储新邮件的数量,并在需要时进行更新。
AJAX轮询在服务器端可能很昂贵(当您的数据库变大时select count(*) from ...
可能很昂贵,而且您需要这样做,例如,每分钟一次检查)。
如果用户只是在您的网站上浏览,并且没有新消息,您可以跳过select
有关消息的更多信息。