主题:[讨论]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的方法判斷是否帳號跟密碼都正確後斷線
正確》轉至原本要看的頁面,失敗》轉回登入畫面並顯示錯誤訊息
其中的注解為上面~~~不過本人程式很弱不是很懂怎麼改
請各位幫幫我~
實作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的方法判斷是否帳號跟密碼都正確後斷線
正確》轉至原本要看的頁面,失敗》轉回登入畫面並顯示錯誤訊息
其中的注解為上面~~~不過本人程式很弱不是很懂怎麼改
請各位幫幫我~