서문
얼마전에 프로젝트를 진행하고 있었는데 매번 처음 로그인할 때 자동으로 포인트를 주라고 하더군요. 낮.
로그인해도 포인트가 안 생겨서 몇 초간 우울했어요.
바이두에서 한참 검색하다가 고민 끝에 이 방법을 생각해냈습니다.
즉, 포인트는 암묵적으로 주어지는 것이죠. 다른 사람들은 포인트를 확인해야만 알 수 있고, 그렇지 않으면 알 수 없습니다.
어리둥절
APP 사용자 인터페이스를 클릭할 때마다 로그인해야 하기 때문에 처리하기 쉽습니다. 그냥 로그인할 때 매일 첫 로그인인지 판단하면 됩니다.
하지만 말처럼 쉽지 않은 일도 있습니다. 어떻게 알 수 있나요?
users
데이터베이스를 쿼리해 보니 데이터베이스에
last_login
필드가 있다는 것을 암묵적으로 알게 되었습니다. 기록되는 것은 각 사용자의 로그인 시간에 대한 그리니치 표준시 타임스탬프입니다.
그리니치 표준시
그리니치 표준시(구 번역 Greenwich Mean Time 또는 Greenwich Mean Time; 영어: Greenwich
평균
시간(GMT)은 영국 런던 교외에 있는 왕립 그리니치 천문대의 표준시를 가리키는데, 본초 자오선은 그곳을 지나가는 경도로 정의되기 때문입니다. 1924년 2월 5일부터 그리니치 천문대는 매시간 시간 조정 정보를 전 세계에 보냈습니다.
타임스탬프
타임스탬프(timestamp)는 일반적으로 일련의 문자로, 특정 시점을 고유하게 식별합니다. 디지털 타임스탬프 기술은 디지털 서명 기술의 변형입니다.
그러므로 로그인한 상태에서 먼저 마지막 타임스탬프(현재 데이터가 수정되지 않음)를 쿼리하고 기록한 다음 타임스탬프를 최신으로 수정하여 기록하고 두 타임스탬프를 비교합니다. 여기서는
getdate()
함수
getdate()
getdate()를 사용합니다. 날짜/시간 정보를 얻는 기능입니다.
구현
말이 많아서 아래 코드를 올려드립니다.
이 코드는 로그인 기능에 있습니다.
$user_id가 결정되었다고 가정하면 다음 방법을 사용하여
/*查询到上一次登陆的last_login*/ $sql = "SELECT last_login FROM users WHERE user_id = '$user_id'"; /*获取上一次登录的格林威治时间的时间戳*/ $last_login_old = $GLOBALS['db']->getOne($sql); /*获得上一次登陆日期*/ $last_login_date_old = getdate($last_login_old); /*更新用户最后一次登陆时间last_login*/ $sql = "UPDATE users SET last_login = '" .gmtime(). "' WHERE user_id = '$user_id'"; /*执行UPDATE*/ $GLOBALS['db']->query($sql); /*查询到最新的登陆的格林威治时间的时间戳*/ $last_login_new = gmtime(); /*获得最新日期*/ $last_login_date_new = getdate($last_login_new); /*进行比较,yday是一年的第几天*/ /*若出现不等于的情况,就说明是当天第一次登陆*/ if($last_login_date_old['year'] != $last_login_date_new['year'] || $last_login_date_old['yday'] != $last_login_date_new['yday']) { /*判断成功,doSomething*/ }
/** * 获得当前格林威治时间的时间戳 * @return integer */ function gmtime() { return (time() - date('Z')); }
지원하려면 이 기능이 필요합니다. 관련 기사:
사용자가 처음으로 페이지에 접속했는지 확인하는 방법은 무엇입니까?