php / אימות ומעקב אחר משתמשים עם php / אימות מול קובץ שטוח
אימות מול קובץ שטוח
נאמר שיש לכם קובץ טקסט בו שמות המשתמשים שלכם והסיסמאות שלהם
מופרדים ע"י נקודותיים, בצורה כזאת:
joe:ai890d
jane:29hj0jk
mary:fsSS92
bob:2NNg8ed
dilbert:a76zFs
אתם יכולים ליצור "לולאה" שתפצל את כל שמות המשתמשים והסיסמאות שלהם
לפני שמנסים להשוות אותם מול $PHP_AUTH_USER ו-$PHP_AUTH_PW .
דבר ראשון, פתחו את הקובץ המכיל את הרשימה והעתיקו את התוכן שלו
למשתנה בשם: file_contents$:
$filename = "/path/to/file.txt";
$fp = fopen($filename, "r");
$file_contents = fread($fp, filesize($filename));
fclose($fp);
עכשיו משתנה ה-file_contents$ מכיל את כל התווים בקובץ שם המשתמש/הסיסמא .
הוא שמור כמחרוזת אחת ארוכה עם תווי החזרת גררה. כעת נשתמש בפונקציית
ה - ()explode כדי להפריד את המחרוזת הזאת לתוך משהו שנוכל לעשות אתו משהו.
פונקציית ה- ( ) explode היא פשוטה ומאוד נוחה לשימוש: היא מאפשרת לכם לקחת
חלקים או מחרוזת שלמה ולהכניס אותם לתוך מרכיבי מערך נתונים ע"י הגדרת תו
מפריד. לדוגמא , אם היינו מטעינים את המחרוזת "blah1;blah2;blah3", תוך
שימוש ב"נקודה פסיק" כתו מפריד, היינו מקבלים מערך נתונים עם שלושה
מרכיבים blah1, blah2 ו-blah3.
דבר ראשון, נרצה לשים כל צמד שם משתמש/סיסמא בתוך מרכיב מערך נתונים
משלו. נטעין את המשתנה file_contents$ לתוך מערך נתונים בשם line$ .
המפריד הוא תו החזרת הגררה. ("r/")
$line = explode("r/", $file_contents);
עכשיו כל מרכיב של $line ($line[0], $line[1]) וכו' מכיל צמד שם משתמש/סיסמא
(joe:ai890d,jane:29hj0jk וכו').
תאלצו "להטעין" את החבר'ה הקטנים האלה עוד פעם אחת כדי להפריד בין
שם המשתמש לסיסמא. כדי לעשות זאת, השתמשו ב-לולאה:
// loop for as long as $line has stuff in it
while($i <= sizeof($line)) {
// explode to get username and password
$data_pair = explode(":", $line[$i]);
// try to find a match
// if match exists, assign value of 1 to $
auth and break out of the loop
if (($data_pair[0] == "$PHP_AUTH_USER") &&
($data_pair[1] == "$PHP_AUTH_PW")) {
$auth = 1;
break;
// if match doesn't exit, assign value of 0 to $auth
} else {
$auth = 0;
}
// increment to continue looping
$i++;
}
עכשיו, עשו משהו עם הערך auth$. השאיפה היא ערך של ,1 כך שאם
$auth==1 המשתמש מורשה ויש הילולה גדולה. לעומת זאת, אם $auth==0
המשתמש לא שייך, אז הקפיצו לו את התיבה המעצבנת פעם נוספת:
if ($auth == "1") {
echo "
You're authorized!
";
exit;
} else {
header('WWW-Authenticate: Basic realm="My
Private Stuff"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}
הסקריפט כולו נראה בערך כך. אתם גם מוזמנים לראות אותו בפעולה.
<?php
// File Name: auth03.php
// Check to see if $PHP_AUTH_USER already contains
info
if (!isset($PHP_AUTH_USER)) {
// If empty, send header causing dialog box to
appear
header('WWW-Authenticate: Basic
realm="My Private Stuff"');
header('HTTP/1.0 401 Unauthorized');
exit;
} else if (isset($PHP_AUTH_USER)) {
// If non-empty, open file containing valid user info
$filename = "/path/to/file.txt";
$fp = fopen($filename, "r");
$file_contents = fread($fp,
filesize($filename));
fclose($fp);
// Place each line in user info file into an array
$line = explode("\n", $file_contents);
// For as long as $i is < the size of the $line array,
// explode each array element into a username and
password pair
$i = 0;
while($i <= sizeof($line)) {
$data_pair = explode(":",$line[$i]);
if (($data_pair[0] ==
"$PHP_AUTH_USER ")
&& ($data_pair[1] ==
"$PHP_AUTH_PW")) {
$auth = 1;
break;
} else {
$auth = 0;
}
$i++;
}
if ($auth == "1") {
echo "<P>You're authorized!</p>";
exit;
} else {
header('WWW-Authenticate: Basic realm="My
Private Stuff"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}
?>
!
עמוד הבא: אימות מול מאגר מידע >>
|