พบกับบทความเกี่ยวกับคอมพิวเตอร์และ programming ได้ที่ http://articles.modoeye.com
PHP Articles / HTTP Authenticate + PHP + MySql
Administrator
Mon 7 Nov 2005 03:04:16
การ authorize user ด้วย php มีหลายวิธีครับ วันนี้เราจะมาดูการ HTTP Authenticate ด้วย PHP กันครับ

ตามมาตรฐาน HTTP แล้วเมื่อต้องการให้มีการแสดง dialog เพื่อ login นั้นจะต้องมีการส่ง header  WWW-Authenticate ไปยัง browser

โดยการ Autheticate ด้วย HTTP authenticate นี้จะมี 2 แบบคือ
  1. Digest เป็นการ Authenticate โดยมีการส่ง username : password ไปยัง server โดยไม่มีการเข้ารหัส (unencrypted)
  2. Basic เป็นการ Authenticate โดยมีการส่ง username : password ไปยัง server โดยมีการเข้ารหัส (encrypted)
ในที่นี้ผมขอยกตัวอย่างในแบบ basic นะครับ
การส่ง header ไปยัง client ก็ใช้ header() นี่ล่ะครับ เช่น header("WWW-Authenticate :Basic realm=\"secure access\"");

โดยค่าของ realm จะต้องมีการส่งค่า realm ไปยัง client ทั้งแบบ basic และ digest ความหมายของ realm คือเป็นตัวบ่งบอกส่วนที่ต้องการทำ authenticate เท่านั้น (จะตั้งเป็นชื่ออะไรก็ได้ครับ ตามต้องการ) โดย browser จะนำไปแสดงผลใน login dialog ด้วยครับ

หลังจากส่ง header ไปยัง client แล้ว browser จะทำการแสดง login dialog เพื่อให้ user กรอก username และ password เพื่อทำการล็อกอิน เมื่อ user พิมพ์ username และ password แล้วกด ok เพื่อทำการ login แล้ว browser จะทำการส่งค่า username และ password (ที่ถูกเข้ารหัสแล้ว) ไปยัง server โดย PHP จะได้รับค่าตัวแปรเหล่านี้มาเก็บไว้ในตัวแปร $_SERVER["PHP_AUTH_USER"] และ $_SERVER["PHP_AUTH_PW"] โดยเก็บ username และ password ตามลำดับ

โดยเราจะนำตัวแปร 2 ตัวนี้มาใช้ในการ authorize user กันครับ

ตัวอย่างการใช้งาน HTTP Authenticate + PHP + MySql
<?
if(isset($_SERVER["PHP_AUTH_USER"]) && isset($_SERVER["PHP_AUTH_PW"])){
    $link = @mysql_connect("localhost","root","pass");
    @mysql_select_db("db_name", $link);
    $res = @mysql_query("SELECT id FROM user_table WHERE username='".$_SERVER["PHP_AUTH_USER"]."' AND password='".$_SERVER["PHP_AUTH_PW"]."' LIMIT 1", $link);
    if(@mysql_num_rows($res) == 1){
       //Authorize OK
    }else{
       //Authorize failed
    }
    @mysql_free_result($res);
    @mysql_close($link);
}else{
    header("WWW-Authenticate :Basic realm=\"secure access\"");
    echo "Restriction area, authorized require.";
    //แสดงผลเมื่อไม่มีการ authorized
    exit;
}
?>

เป็นเพียงตัวอย่างโค๊ดเท่านั้นนะครับ ลองเอาไปประยุกต์ใช้ดูครับ
Reply
Name:
E-mail:
Home | Services | Forum | Classified | Directories | Support | Contact
ATOM feed RSS 0.9 feed RSS 1.0 feed RSS 2.0 feed
Copyright © 2005 - 2007 Modoeye.com, All Rights Reserved.
Disclaimer | Privacy policy | Term of Use | Term of Services
Valid XHTML Valid CSS! PHP: Hypertext Preprocessor MySQL database Apache Powered! FreeBSD Power to serve
Modoeye Sitemap Client login