如何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:08 編輯

點解要 2 個 field ?
用一個 field 設為 nullable
null = 從未做過 VIP
有到期日 = 做過 VIP
now > 到期日 = 過期

TOP

點解要 2 個 field ?
用一個 field 設為 nullable
null = 從未做過 VIP
有到期日 = 做過 VIP
now > 到期日  ...
kong3883 發表於 2019-5-30 00:07



    cron都唔需要

TOP

因為仲有第三種會藉, 同VIP時間無關係

TOP

本帖最後由 alan11abc 於 2019-5-30 03:48 編輯
因為仲有第三種會藉, 同VIP時間無關係
3ldk 發表於 2019-5-30 03:28

乜唔係
第一個方法,加用兩個欄位
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

TOP

喔, 見 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

TOP

喔, 見 OP 只提到兩種, 如果有第三種或更多, 就如樓上所講, 2 個 field

trigger 都可以而且方便, 但久而久 ...
kong3883 發表於 2019-5-30 06:41



   
唔常用的欄位就應該分表

呢個觀念我真係沒

TOP

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.

TOP

a function returns membership level

TOP

本帖最後由 hihihi123hk 於 2019-6-6 11:58 編輯
db入面的member table, 有一個field係記住該會是係一般會藉還是VIP會藉
仲有另一個field記住VIP會藉的到期 ...
3ldk 發表於 2019-5-29 23:30



    可以試下用 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 時嘅資訊)


https://jwt.io
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

TOP