在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

如何設(shè)計一個每天每人只能點贊一次的功能(無狀態(tài))?

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

我是通過cookie的思路 控制每人每天只能點擊一次

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

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

回答
編輯回答
過客

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

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

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

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

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

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

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

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

參考:redis-set

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

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

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

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

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

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

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

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

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

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

但是兩種做法都有問題,等一個更好的解決方法;

---分割線---

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

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

經(jīng)驗告訴我說。不登錄的話,沒有唯一標(biāo)識,(IP不算唯一標(biāo)識)。真的限制不住。

防住的都是普通用戶。

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

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

2017年8月8日 22:39