DELIMITER // CREATE OR REPLACE FUNCTION checktoken( p_token VARCHAR(200) ) /* Function : 判斷傳入的 Token 是否過期, 若未過期, 傳回 userid, 已過期傳回空白 Description: 判斷 Token 是否過期, 若未過期, 傳回 0, 已過期傳回 9 簡單的測試 ok Build Date : 2018/03/02 Modify History Item Who Date Modify Docs ==== ========== ========== ================================================ 1 Michael 2018/01/08 開始改寫為 MySQL 版 */ RETURNS VARCHAR(100) DETERMINISTIC BEGIN DECLARE v_lastlogintime DATETIME; DECLARE v_recno INT; DECLARE v_diffhour INT; DECLARE v_statuscode INT; DECLARE v_errMsg VARCHAR(200); DECLARE v_longday INT; -- 0: token 永久有效 其他: token 的效期天數 DECLARE v_userid VARCHAR(100); SET v_longday = 0; -- token 預設永久有效 SET v_statuscode = 4; SET v_userid = ''; SET v_errMsg = '帳號或密碼錯誤!'; SELECT COUNT(*), userid, lastlogintime INTO v_recno, v_userid, v_lastlogintime FROM sys_users WHERE IFNULL(isstop, '') <> 'Y' AND IFNULL(token, 'null') = p_token GROUP BY userid, lastlogintime; IF v_recno > 0 THEN -- 如果傳入 token SELECT TIMESTAMPDIFF(HOUR, v_lastlogintime, NOW()) INTO v_diffhour; IF v_diffhour >= 24 * v_longday AND v_longday > 0 THEN SET v_statuscode = 9; SET v_errMsg = 'token 已過期,請重新登入!'; SET v_userid = ''; ELSE SET v_statuscode = 0; SET v_errMsg = 'token 有效!'; END IF; END IF; -- 回傳值 dataset[0], 前3個欄位有固定的內容 RETURN IFNULL(v_userid, ''); END // DELIMITER ;