基本上是要用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 則留言:
請問autologin資料表是另外創一個存起來嗎?還是用原本帳戶資料那個資料表直接覆蓋資料進去就好?
hi 大大您好~
想不到7年前的文章會被大大捧場XD
看起來當時小弟的作法是 透過紀錄cookie 在寫入對應的user
所以這邊三個欄位 userID, 過期時間 跟cookie就做好了
不過不見意這樣做 現在大部分透過主流的framework都可以幫你處理好這段了
感恩大大~~~~
發佈留言