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;

}

?>

!





עמוד הבא: אימות מול מאגר מידע >>




הקדמה
אימות HTTP עם
PHP
אימות מול קובץ
שטוח >
אימות מול מאגר
מידע
שימוש ב'קוקיס'
סשנים הם
התשובה
סשנים והעדפות
משתמש
סיכום