2007/07/20

實作POP3認證BY PHP


呼~PHP放到快發霉了XD

===源起===
因為想寫一個通訊錄來放大學同學的資料
但是沒有適當的認證系統就大辣辣把資料放在上面也是很草率
重新弄一套帳號也沒啥意義
所以就有興起用學校的UNIX SERVER作認證

加上之前在計中有做影音網頁
需要認證為在校生才可以登入觀看
所以就有拿到一個利用POP3來認證的程式碼
顧全有版權爭議,所以這段程式碼我只用註解來表示

可以到《這裡》玩看看(雖然是個很簡單的功能XD)
需要北科帳號喔!

===架構===
總共有四個頁面
  1. Index.php 》 需要登入才可以看的資料頁,網頁名稱不一定用INDEX
  2. Login.php 》登入的表格,負責將使用者輸入的帳密丟給程式處理
  3. LoginCheck.php 》核心程式,到POP3認證後,成功轉頁至域觀看頁面
  4. LogOut.php 》登出頁面

《Login.php》

錯誤訊息會POST回來顯示錯誤訊息,送出後到LoginCheck檢測


《LoginCheck.php》
這個沒有畫面XD,因為不能貼程式碼,所以大略說一下架構
  1. 接收Login.php送來的帳號跟密碼,存為變數
  2. 利用fsockopen連接至主機及連接埠
  3. 連線成功後,利用POP3執行指令成功後惠於前三碼輸出"+OK",用fgets ($fp,128)去抓取字串後用substr($抓到的字串,0,3)取前三位判斷
  4. 之後用fputs丟使用者跟密碼,至於要怎麼多請看POP3的認證指令
  5. 重複用抓+OK的方法判斷是否帳號跟密碼都正確後斷線
  6. 正確》轉至原本要看的頁面,失敗》轉回登入畫面並顯示錯誤訊息

《Index.php》

在每頁需登入的頁面上加入
Session_start();
session_register('redir');

//判斷用戶是否登入,未登入時紀錄該檢視業面後轉至登入畫面
if (!(($_SESSION['login_user']) && ($_SESSION['login_status'] == 'true'))){
 $_SESSION['redir']=$_SERVER['PHP_SELF'];  //紀錄此頁資訊 
 header("location:login.php");   
}

即可檢查是否已登入,當然該網頁附檔名需為php

《Logout.php》

Logout的作用就是清除該登入所紀錄的SEESION值,用以下語法
session_start();
session_unset();
session_destroy();

下方就可自己設計登出顯示的畫面,我是顯示訊息後自動跳轉回首頁
不過我的首頁是需要登入才可以看到的,所以會跑到Login頁面

《心得》紀錄下自己學到什麼比較重要
  1. 利用SEESION紀錄傳值,紀錄登入前的網頁,這樣比較人性化
  2. 釐清登入的流程,該怎麼判斷是否登入,並能套用到其他頁面上

在內行人看起來這個是很簡單的東西,但是實際自己找網頁學函數用法,改掉錯誤訊息,就讓我耗費幾小時的時間,但是還佩服自己有毅力把他弄出來^^

《Login.php原始碼》


《Index.php原始碼》


《Logout.php原始碼》

1 則留言:

  1. 挖~寫的好專業~_~
    我不知道有少甚麼 因為可以用就好XD

    回覆刪除