鍍金池/ 問(wèn)答/PHP/ 如何設(shè)計(jì)一個(gè)每天每人只能點(diǎn)贊一次的功能(無(wú)狀態(tài))?

如何設(shè)計(jì)一個(gè)每天每人只能點(diǎn)贊一次的功能(無(wú)狀態(tài))?

如題:
如何設(shè)計(jì)一個(gè)點(diǎn)贊統(tǒng)計(jì)的功能 ,每天每人只能點(diǎn)擊一次,沒(méi)有登陸狀態(tài)

我是通過(guò)cookie的思路 控制每人每天只能點(diǎn)擊一次

如果緩存被清空了,就會(huì)有bug 訪客會(huì)再次重新點(diǎn)擊
如何設(shè)計(jì)?

如果控制ip 就需要存入數(shù)據(jù)庫(kù),是否有其它最優(yōu)方案?

回答
編輯回答
過(guò)客

不管cookie還是ip,最關(guān)鍵是看你的這個(gè)功能面向的對(duì)象,對(duì)象是普通用戶cookie足矣

2018年3月11日 13:52
編輯回答
祉小皓

不能.只能有限的限制一下.

2017年12月14日 04:27
編輯回答
陪妳哭

你這樣想哈,要知道這個(gè)人(今天)有沒(méi)有點(diǎn)過(guò)贊,那就肯定要一個(gè)東西來(lái)存儲(chǔ)狀態(tài),
這個(gè)狀態(tài)可以放前端cookie存,可以放后端數(shù)據(jù)庫(kù)存,再高深一點(diǎn)就是借助其他同步狀態(tài)存儲(chǔ)。
那么你這個(gè)點(diǎn)贊狀態(tài)有沒(méi)有和其他狀態(tài)是同步的呢?比如說(shuō)點(diǎn)完贊本用戶今天頭像就多了個(gè)啥標(biāo)志之類(lèi)的,就可以依靠這個(gè)標(biāo)志來(lái)判斷是否點(diǎn)贊,這就是借助了標(biāo)志存儲(chǔ)狀態(tài)了。
反正必須要一個(gè)東西來(lái)存啊。

2018年5月17日 22:34
編輯回答
故林

前提:沒(méi)有登陸狀態(tài)
如你所說(shuō),通過(guò) cookie 控制,是有缺陷的。
建議:
這種時(shí)效性的操作,可以用 redis 一類(lèi)的緩存來(lái)做,沒(méi)必要持久化存儲(chǔ)。
當(dāng)然,后端存儲(chǔ),無(wú)論是否持久化,你都是需要客戶端的憑證的,也就是 IP

方案:
redis 存儲(chǔ)當(dāng)天點(diǎn)贊的 IP 集合,如果在集合里,則限制點(diǎn)贊。
每天零點(diǎn),清空集合,重新記錄即可。

參考:redis-set

2017年6月1日 11:32
編輯回答
尐潴豬

如果沒(méi)有登陸狀態(tài)怎么判斷“每人”呢?這里的“每人”應(yīng)該是指每個(gè)用戶吧。用戶每天的點(diǎn)贊狀態(tài)要判斷,要判斷就要存儲(chǔ)。所以,我是沒(méi)有想到好的方法。

2017年9月4日 21:28
編輯回答
裸橙

想完全控制就得在服務(wù)端記錄用戶的唯一標(biāo)識(shí),數(shù)據(jù)庫(kù)或者文本文件都可以

2017年2月28日 21:36
編輯回答
涼薄

感覺(jué)這個(gè)問(wèn)題的關(guān)鍵點(diǎn)在身份的確認(rèn),無(wú)論是種在cookie中還是通過(guò)ip限制都是不靠譜的,cookie可以清楚掉,至于ip我們獲取的是一個(gè)出口ip(一個(gè)路由可能有多個(gè)電腦使用,但他們的出口ip一樣,那么他們這些不同的電腦算是一個(gè),還是多個(gè)呢?)
這個(gè)應(yīng)該業(yè)務(wù)決定的,通過(guò)業(yè)務(wù)決定什么才叫做一個(gè)獨(dú)立的用戶,如果對(duì)點(diǎn)贊的數(shù)據(jù)可靠性要求比較高,最好還是要登錄操作,希望對(duì)你有幫助

2018年3月3日 05:38
編輯回答
懷中人

把當(dāng)天時(shí)間的時(shí)間戳加上用戶id,加密之后直接存到用戶對(duì)應(yīng)的字段里;
$date = md5(strtotime(date('Y-m-d')). $id);

當(dāng)用戶再次點(diǎn)擊的時(shí)候,前端再生成一次,跟后端生成的對(duì)比一次,如果不同,則說(shuō)明不是當(dāng)天日期(這里沒(méi)有做前一天的處理),直接加入數(shù)據(jù)庫(kù);

這種方法可以處理,當(dāng)然,直接在用戶表里記錄狀態(tài)也可以;

但是兩種做法都有問(wèn)題,等一個(gè)更好的解決方法;

---分割線---

沒(méi)看到“未登錄狀態(tài)”,
那么,上面說(shuō)的都是屁話,
問(wèn)題被轉(zhuǎn)化成了“未登錄狀態(tài)下如何給每個(gè)用戶一個(gè)唯一標(biāo)識(shí)?”;
簡(jiǎn)而言之,就類(lèi)似于京東那種未登錄加入購(gòu)物車(chē),即使切換用戶,也能夠知道用戶到底是誰(shuí);
答案是:不能;

2017年7月10日 15:52
編輯回答
胭脂淚

經(jīng)驗(yàn)告訴我說(shuō)。不登錄的話,沒(méi)有唯一標(biāo)識(shí),(IP不算唯一標(biāo)識(shí))。真的限制不住。

防住的都是普通用戶。

2017年5月22日 20:28
編輯回答
朽鹿

這個(gè)cookie或者ip的可靠性都不高,如果別人使用了批量代理ip來(lái)請(qǐng)求,照樣可以刷數(shù)據(jù)

2017年8月8日 22:39