作者: 3ldk 時間: 2019-5-29 23:30 標題: 如何update會員資格?
db入面的member table, 有一個field係記住該會是係一般會藉還是VIP會藉
仲有另一個field記住VIP會藉的到期日
logic係, 當過左到期日, 就要將VIP會藉轉返做一般會藉
但問題係, 應該點做?
我暫時諗到兩個方法:
1. 加多條path, e.g. http://xxxxxxx.com/checkexpirevip, 然後加個cron job每日call一次依個網址
2. 將個function加係網站每一個request之前, 即係無論去邊個網址都會行依個function, 只係我會搵個位save底最後執行日期, 果日行過就跳過該function
如果大家遇到類似功能, 會用咩更好既方法去做? 或者上面哪一種方法?
作者: kong3883 時間: 2019-5-30 00:07
本帖最後由 kong3883 於 2019-5-30 00:08 編輯
點解要 2 個 field ?
用一個 field 設為 nullable
null = 從未做過 VIP
有到期日 = 做過 VIP
now > 到期日 = 過期
作者: alan11abc 時間: 2019-5-30 00:30
點解要 2 個 field ?
用一個 field 設為 nullable
null = 從未做過 VIP
有到期日 = 做過 VIP
now > 到期日 ...
kong3883 發表於 2019-5-30 00:07
cron都唔需要
作者: 3ldk 時間: 2019-5-30 03:28
因為仲有第三種會藉, 同VIP時間無關係
作者: alan11abc 時間: 2019-5-30 03:44
本帖最後由 alan11abc 於 2019-5-30 03:48 編輯
乜唔係
第一個方法,加用兩個欄位
Membership_type
Membership_expire_date
Membership_type = third_kind
就唔洗Check
唔係嘅話先Check?
BTW
http://www.mysqltutorial.org/mysql-triggers/working-mysql-scheduled-event/
via HKEPC Reader for Android
作者: kong3883 時間: 2019-5-30 06:41
喔, 見 OP 只提到兩種, 如果有第三種或更多, 就如樓上所講, 2 個 field
trigger 都可以而且方便, 但久而久之可能會唔記得有 trigger 的存在,
因為單睇 project 的 source code, 會唔知有 trigger 存在
當然是放在每個 request, 千萬不要相信 client pass 過來的 data,
cookies 可以改 , session id 可以古, backend 本來就需要驗證 user 佢可以做 d 咩, 唔可以做 d 咩
睇你個描述, VIP 會籍是要人手 assign ?
1. 加多條path ... 呢個 cost 太高, backend 執行有時限, 會員越多有機會 timeout
另外 users table, 唔好所有野都寫晒入去, 唔常用的欄位就應該分表
例如明明最常被瀏覽的頁面都冇顯示 email, address ...etc
只有按 user profile 條 link 才會顯示, 就應該建立一個 table user_profile (id, email, address)
覺得幾好, 分享一下, 就算唔係用 laravel 都可以睇睇
https://github.com/alexeymezenin/laravel-best-practices
作者: alan11abc 時間: 2019-6-5 18:50
唔常用的欄位就應該分表
呢個觀念我真係沒
作者: CVSDF 時間: 2019-6-5 23:28
I would put the checking on the member login / member area common include file. If the vip status changed u can then notify the user.
作者: 望月小妖 時間: 2019-6-6 10:03
a function returns membership level
作者: hihihi123hk 時間: 2019-6-6 11:48
本帖最後由 hihihi123hk 於 2019-6-6 11:58 編輯
可以試下用 JWT 嘅概念取代 "Random String Session"
VIP Expire date 唔係咩秘密野,只係 Meta Data,可以放係 JWT 內
1. 用戶成功 Login 之後將 VIP expire date (+ Optional: SessionId) 放係 JWT Payload 內,Sign 一條 JWT 比用戶。
2. Server 照舊用 Set-Cookies 方法將個 JWT 放落個 Browser 度
3. 然後每次 Request 上黎都可以拎住 User 個 JWT
4. Verify 個 JWT 係你 Sign 嘅
5. 爆開 JWT 睇下 VIP expire date
咁樣做可以完全唔洗經 I/O (Database),因為每次 login 都必定要對 DB 然後順免拎埋個 DB Result Sign JWT,兼且做到 Exactly 你想做嘅野。但留意番,JWT 本身係 stateless,如果你會手撩 Database 改 VIP Expire Date 咁就要加個 Session ID 放落 Redis,之後每次 JWT 上黎要喺 Redis 對 Session ID。
手撩 Database 改 VIP Expire Date 之後去 Redis 清咗個 Session ID 咁嘅方法去出 401 彈 User 走叫佢重新 Login。
示意圖(左係 Token,右係 Server 爆開 / Sign 時嘅資訊)
[attach]2130940[/attach]
https://jwt.io
作者: freefdhk 時間: 2019-6-14 03:02
好多時所謂永久VIP 只要入佢做100~200年就可以慳返一欄.
作者: 清仔 時間: 2019-6-16 12:17
如果pure DB solution
係咪可以用SQL trigger + procedure 黎做?

