回 帖 发 新 帖 刷新版面

主题:[讨论]POP3認證

POP3認證


實作POP3認證BY PHP
===架構===
總共有四個頁面

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


《Login.php原始碼》
<head>
<meta http-equiv="Content-Language" content="zh-tw">
</head>
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="100%" id="table1">
<!-- MSTableType="nolayout" -->
<tr>
  <td>
  <div align="center">
  <form name=form1 method=post action=LoginCheck.php target=_parent>
   <table border="0" width="303" cellspacing="4" cellpadding="0" id="table2" bordercolor="#000000" bgcolor="#F7F6F3" height="111">
    <tr>
     <td colspan="2" height="22" bgcolor="#5D7B9D">
     <p align="center"><font color="#FFFFFF"><b>登入</b></font></td>
    </tr>
    <tr>
     <td width="115" align="right" height="21"><font size="2">使用者名稱:</font></td>
     <td width="176" height="21"><input name=loginuser type=text id="loginuser"></td>
    </tr>
    <tr>
     <td width="115" align="right" height="21"><font size="2">密碼:</font></td>
     <td width="176" height="21"><input name=loginpass type=password id="loginpass"></td>
    </tr>
    <tr>
     <td width="295" colspan="2"> 
          <p align="center"> 
          <input type="submit" value="送出" name="B1">
          <input type="reset" value="重新設定" name="B2">
        </td>
    </tr>
   </table>
   </form>
      
      <?php 
      if (isset($_REQUEST['message']))
        if ($_REQUEST['message']=="error") 
        echo "<div align=center><font color=#FF0000>
        <strong>帳號或密碼錯誤</strong></font></div>"; 
      ?>         
  </div>
  </td>
</tr>
</table>

《Index.php原始碼》
<?php
Session_start();
session_register('redir');
//判斷用戶是否登入,未登入時紀錄該檢視業面後轉至登入畫面
if (!(($_SESSION['login_user']) && ($_SESSION['login_status'] == 'true'))){
      $_SESSION['redir']=$_SERVER['PHP_SELF'];  //紀錄此頁資訊  
      header("location:login.php");    
      }
?>
<html>
<head>
<meta http-equiv="Content-Language" content="zh-tw"  charset="UTF-8">
</head>
<body>
<table border="0" align="center" width="100%" height="100%">
  <tr><td>
    <table align="center" bgcolor="#F7F6F3" height="200px" width="300px" border="0"><tr>
    <td align="center">這裡是需登入的網頁內容

        <a href="logout.php">登出</a>
    </td>
    </tr></table>
  </td></tr>
</table>
</body>
</html>

《Logout.php原始碼》

<?php
session_start();
session_unset();
session_destroy();
?>
<head>
<meta http-equiv="Content-Language" content="zh-tw" charset="UTF-8">
<meta http-equiv="refresh" content="20; url=index.php">
</head>
<table border="0" align="center" width="100%" height="100%">
  <tr><td>
    <table align="center" bgcolor="#F7F6F3" height="200px" width="300px" border="0"><tr>
    <td align="center">
        您已經登出,20秒後自動換頁

        <a href="index.php">回首頁</a>
    </td>
    </tr></table>
  </td></tr>
</table>
有3個程式碼沒問題不過核心程式麻煩請看一下


<?
   /*
      檢查POP3連線
   */
   function CheckPOP3($server,$id,$passwd,$port=110) {
      if (empty($server)||empty($id)||empty($passwd))
         return false;

      //連結POP3 Server
      $fs = fsockopen ($server, $port, &$errno, &$errstr, 5);

      //檢查是否連線
      if (!$fr)
         return false;

      //connected..
      $msg = fgets($fr,128);

      //step 1. 傳送帳號
      fputs($fr, "USER $id\r\n");
      $msg = fgets($fr,128);
      if (strpos($msg,"+OK")===false)
         return false;

      //step 2. 傳送密碼
      fputs($fr, "PASS $passwd\r\n");
      $msg = fgets($fr,128);
      if (strpos($msg,"+OK")===false)
         return false;

      //step 3.通過認證 QUIT
      fputs($fr, "QUIT \r\n");
      fclose($fr);

      return true;
   }
?>


接收Login.php送來的帳號跟密碼,存為變數

利用fsockopen連接至主機及連接埠

連線成功後,利用POP3執行指令成功後惠於前三碼輸出"+OK",用fgets ($fp,128)去抓取字串後用substr($抓到的字串,0,3)取前三位判斷

之後用fputs丟使用者跟密碼,至於要怎麼多請看POP3的認證指令

重複用抓+OK的方法判斷是否帳號跟密碼都正確後斷線

正確》轉至原本要看的頁面,失敗》轉回登入畫面並顯示錯誤訊息
其中的注解為上面~~~不過本人程式很弱不是很懂怎麼改
請各位幫幫我~

回复列表 (共2个回复)

沙发

.............................................!@#$$&^erer$%^&@#####@#****?

板凳

我也想知道 mail 函数不能成功发信的原因
是不是pop3的配置问题

我来回复

您尚未登录,请登录后再回复。点此登录或注册