星期六, 4月 17, 2010

PEAR:AUTH的用法1

About 1.  引入檔案
在程式中如果需要用到PEAR:AUTH的話第一步當然是要先引進Auth.php這一個檔案


<html>
<head><title>PHP TEST</title></head>
<body>

<?php

require_once("Auth/Auth.php");

?>

</body>
</html>

About 2. 建立AUTH物件,將相關參數傳入建構子

Auth

Auth::Auth (mixed $storageDriver = "DB",

mixed $options = "",

string $loginFunction = ""

[, boolean $showLogin = TRUE])
$storageDriver資料源、$options依資料源不同而有不同選項、$loginFunction使用者定義之方法,以下先用一個例子解釋上式。
<?php
require_once "Auth.php";

function loginFunction(){
print <<< HTML_LoginForm
<form method="post" action="login.php?login=1">
<dl>
<dt>名稱</dt>
<dd><input type="text" name="username"></dd>
<dt>密碼</dt>
<dd><input type="password" name="password"></dd>
</dl>
<p><input type="submit" value="登入"></p>
</form>
HTML_LoginForm;
}

if(isset($_GET['login']) && $_GET['login'] == 1) {
     $optional = true;
} else {
     $optional = false;
}//已登入後是否再顯現表格

$options = array(
  'dsn' => "mysql://testuser:testuser@localhost/shih",
  );
$a = new Auth("DB", $options, "loginFunction", $optional);

$a->start();

if(isset($_GET['logout']) && $_GET['logout'] == 1) {
  $a->logout();
 echo "<p>已經登出。</p>\n";
 echo "<p><a href=\"login.php?login=1\">由此登入</a></p>\n";
}elseif(!isset($_GET['login'])) {
    echo "<p><a href=\"login.php?login=1\">由此登入</a></p>\n";
}
if($a->getAuth()) {
     echo "<p>已經登入。</p>\n";
  echo "<p><a href=\"login.php?logout=1\">由此登出</a></p>\n";
}
?>
ABOUT 3. 日本範例,有關logout()的session敘述

<?
  require_once("Auth/Auth.php");

  session_cache_limiter("nocache");
//キャッシュの有効期限*
  session_cache_expire(30);
  session_start();*
/*       Pear::Auth認証時に呼び出す関数      */
  function loginFunction($usr,$status){
    switch($status){
      case AUTH_IDLED:
      case AUTH_EXPIRED:
           echo "認証期限が切れました。再ログインして下さい。";
           break;
      case AUTH_WRONG_LOGIN:
           echo "USER ID / PASSWORD が間違ってます。";
           break;
      default:
            break;
    }
  } 

/*      認証に使われるパラメータ      */
  $params=array(
    "dsn"=>"mysql://user:password@localhost/database",
    "table"="table",//ログインのIDとパスワードがあるDBテーブル
    "usernamecol"=>"username",//ID入力フォーム
    "passwordcol"=>"password",//パスワード入力フォーム
    "db_fields"=>"*"//DBテーブルのフィールド 如果要取出欄位資料要加本行
     );

  $myAuth=new Auth("DB",$params,"loginFunction");
/*       ログアウト処理       */
if($_POST["logout"] && $myAuth->checkAuth()){ 
$myAuth->logout();
//セッションを初期化* 
$_SESSION=array(); 
/* セッションクッキーを無効にする */ 
if (isset($_COOKIE[session_name()])) { setcookie(session_name(), "", time()-42000, "example.com/admin/"); } 
//セッションを破壊*
session_destroy(); 
echo "ログアウトしました"; }


  $myAuth->start();
/*       ログイン処理       */
  if($myAuth->getAuth()){
    $_SESSION["username"]=$myAuth->getAuthData("username");//*
    $_SESSION["id"]=$myAuth->getAuthData("id");//*
//セッションに保存*
    session_write_close();
  }else {
    //ログイン画面の表示とか
  }
?>
                              by saboten009
logout方法對session的影響,以下這段話很重要:


PEAR::Authを使った認証のプログラムは、他のサイトやマニュアルでも一緒だと思います。
ログアウトに関しては検索しても見つかりません。PEAR::Auth->logout()を呼び出しただけでは意味がなく、セッションを使っていればセッションデータとクッキーを消去しなければいけません。
また、session_cache_limiter("nocache")の設定がなされていないとログアウトした後もブラウザの戻るボタンでキャッシュが表示されてしまいます(デフォルトの設定では大丈夫)。
*がついてる行は直接Auth認証には関係有りません。
                                                                          
update : 2010/3/23

沒有留言:

張貼留言