PHP ~ auto login ~ 自動登入實作A0A

今天在做自動登入的功能......

基本上是要用cookie來做= =

以下就提供我的做法以及流程A0A


一開始當然就是登入.......判斷帳密正不正確~~~正確~~~

看使用者有沒有打勾記住我(Remember me)~~~如果有打勾

if($_POST['remember_me'] == true)

我會建立一個md5的code~~

$now = getdate();
$cookie_hash = md5($_POST['password'].$now[0]);

(這邊我是把密碼+現在的時間的字串轉md5)

然後存進資料庫

$sql = "REPLACE INTO `autologin` (`user_id`, `expire_date`, `cookie`) VALUES ('".GetSQLValueString($x['id'], 'int')."', NOW() + INTERVAL 3 DAY, ".GetSQLValueString($cookie_hash, 'text').");";

並把剛剛的code存進cookie~~這邊是設定3天後過期

$cookie_time = (3600 * 24 * 3);
setcookie("hp_login", '1', time() + $cookie_time, "/");
setcookie("hp_hash", $cookie_hash, time() + $cookie_time, "/");


使用者就登入了~

如果關閉瀏覽器~~~~~~~下次再進來~~~~~就會先檢查cookie

有cookie的話就查詢SQL~~~~如果有抓到資料~~~~~就自動把登入的狀態assign給他

//if autologin
if(isset($_COOKIE['hp_login']))
{
if($_COOKIE['hp_login'] == '1')
{

if(isset($_COOKIE['hp_hash']))
{
$hash = GetSQLValueString($_COOKIE['hp_hash'], 'text');
$sql = "SELECT * FROM autologin WHERE cookie = ".$hash." AND expire_date > NOW() LIMIT 1";
$r = db_query($sql);
if(db_num($r) == 1)
{
$x = db_fetch($r);

$_SESSION['islogin'] = true;
$_SESSION['userID'] = $x['user_id'];

}
}
}
}


這樣就完成了A0A

雖然cookie自動3天過期.........但我SQL也是有設定過期日

expire_date > NOW()

我的expire_date寫入是登入的時間+3天

NOW() + INTERVAL 3 DAY

所以三天沒來~~~~~即使你cookie還在~~~code正確也不會自動幫你登入~~~

2 則留言:

Unknown 說...

請問autologin資料表是另外創一個存起來嗎?還是用原本帳戶資料那個資料表直接覆蓋資料進去就好?

Bitty 說...

hi 大大您好~

想不到7年前的文章會被大大捧場XD

看起來當時小弟的作法是 透過紀錄cookie 在寫入對應的user

所以這邊三個欄位 userID, 過期時間 跟cookie就做好了


不過不見意這樣做 現在大部分透過主流的framework都可以幫你處理好這段了

感恩大大~~~~