عندما يقوم المستخدمون بتصميم المواقع وصيانتها، غالبًا ما يحتاجون إلى تقييد الوصول إلى بعض الملفات أو المعلومات المهمة. عادةً، يمكننا استخدام آلية مصادقة المستخدم بناءً على بروتوكول HTTP المدمج في خادم الويب. عندما يتصفح الزائر صفحة محمية، سينبثق متصفح العميل نافذة حوار تطلب من المستخدم إدخال اسم المستخدم وكلمة المرور للتحقق من هوية المستخدم لتحديد ما إذا كان للمستخدم الحق في الوصول إلى الصفحة. يتم استخدام طريقتين لتوضيح مبدأ التنفيذ.
1. استخدم رؤوس HTTP لتنفيذ
الرؤوس. الرأس عبارة عن سلسلة يرسلها الخادم قبل إرسال معلومات HTML إلى المتصفح باستخدام بروتوكول HTTP. يستخدم HTTP نموذج التحدي/الاستجابة لمصادقة المستخدمين الذين يحاولون الدخول إلى المناطق المحمية بكلمة مرور. على وجه التحديد، عندما يقدم المستخدم طلبًا إلى خادم الويب للوصول إلى منطقة محمية لأول مرة، تبدأ عملية التحدي، ويعيد الخادم رأسًا خاصًا 401، يشير إلى أنه لم يتم التحقق من هوية المستخدم. بعد اكتشاف الاستجابة أعلاه، ينبثق متصفح العميل تلقائيًا مربع حوار يطلب من المستخدم إدخال اسم المستخدم وكلمة المرور. بعد أن يكمل المستخدم الإدخال وينقر فوق "موافق"، يتم إرسال معلومات التعريف الخاصة به إلى الخادم للتحقق منها. إذا كان اسم المستخدم وكلمة المرور اللذين أدخلهما المستخدم صالحين، فسيسمح خادم الويب للمستخدم بالدخول إلى المنطقة المحمية والحفاظ على صحة هويته طوال عملية الوصول. على العكس من ذلك، إذا تعذر التحقق من اسم المستخدم أو كلمة المرور التي أدخلها المستخدم، فسوف ينبثق متصفح العميل باستمرار نافذة إدخال تطلب من المستخدم محاولة إدخال المعلومات الصحيحة مرة أخرى. ستستمر العملية بأكملها حتى يقوم المستخدم بإدخال موقع المعلومات الصحيح. يمكنك أيضًا تعيين الحد الأقصى لعدد المحاولات المسموح للمستخدم بإجراءها، وعند تجاوزه، سيتم رفض طلب الوصول الخاص بالمستخدم تلقائيًا.
في البرنامج النصي PHP، استخدم رأس الوظيفة () لإرسال رأس HTTP مباشرة إلى متصفح العميل، بحيث تنبثق نافذة إدخال اسم المستخدم وكلمة المرور تلقائيًا على العميل لتنفيذ وظيفة مصادقة الهوية الخاصة بنا. في PHP، يتم حفظ المعلومات التي يدخلها مستخدم العميل تلقائيًا في المتغيرات العامة الثلاثة $PHP_AUTH_USER و$PHP_AUTH_PW و$PHP_AUTH_TYPE بعد إرسالها إلى الخادم. باستخدام هذه المتغيرات الثلاثة، يمكننا التحقق من هوية المستخدم بناءً على معلومات حساب المستخدم المخزنة في ملف البيانات أو قاعدة البيانات.
ومع ذلك، يجب تذكير المستخدمين بأنه لا يمكن استخدام $PHP_AUTH_USER و$PHP_AUTH_PW إلا في PHP المثبتة كوحدة نمطية. والمتغيرات الثلاثة $PHP_AUTH_TYPE. إذا كان المستخدم يستخدم PHP في وضع CGI، فلا يمكن تنفيذ وظيفة التحقق. طريقة تثبيت وحدة PHP مرفقة في نهاية هذا القسم.
أدناه نستخدم قاعدة بيانات Mysql لتخزين هوية المستخدم. نحتاج إلى استخراج اسم المستخدم وكلمة المرور لكل حساب من قاعدة البيانات للمقارنة مع متغيرات $PHP_AUTH_USER و$PHP_AUTH_PW لتحديد صحة المستخدم.
أولاً، قم بإنشاء قاعدة بيانات في MySql لتخزين معلومات المستخدم.
اسم قاعدة البيانات هو XinXiKu واسم الجدول هو المستخدم
؛
المعرف INT(4) ليس NULL AUTO_INCREMENT،
الاسم VARCHAR(8) ليس فارغًا،
كلمة المرور CHAR(8) ليست فارغة،
المفتاح الأساسي (المعرف)
)
الوصف:
1. المعرف هو رقم تسلسلي، وهو ليس صفرًا ويتم زيادته تلقائيًا وهو المفتاح الأساسي؛
2. الاسم هو اسم المستخدم ولا يمكن أن يكون فارغًا؛
3. كلمة المرور هي كلمة مرور المستخدم ولا يمكن أن تكون فارغة؛
ما يلي هو تسجيل الدخول إلى ملف التحقق من المستخدم php
// تحديد ما إذا كان قد تم تعيين اسم المستخدم أم لا
إذا(!isset($PHP_AUTH_USER)) {
header("WWW-Authenticate:Basic realm="وظيفة المصادقة"");
header("HTTP/1.0 401 غير مصرح به");
صدى "فشلت المصادقة، ليس لديك إذن بمشاركة موارد الشبكة!";
مخرج()؛
}
/*الاتصال بقاعدة البيانات*/
$db=mysql_connect("localhost"،"root"،"")؛
//اختر قاعدة البيانات
mysql_select_db("XinXiKu",$db);
//تحقق من وجود المستخدم
$result=mysql_query("SELECT * من المستخدم حيث الاسم='$PHP_AUTH_USER' وكلمة المرور='$PHP_AUTH_PW'",$db);
إذا ($myrow = mysql_fetch_row($result)) {
// فيما يلي العمليات ذات الصلة بعد المصادقة الناجحة
...
} آخر {
// المصادقة غير ناجحة، اطلب من المستخدم إعادة الدخول
header("WWW-Authenticate:Basic realm="وظيفة المصادقة"");
header("HTTP/1.0 401 غير مصرح به");
صدى "فشلت المصادقة، ليس لديك إذن لمشاركة موارد الشبكة!";
مخرج()؛
}
?>
وصف البرنامج:
في البرنامج، تحقق أولاً من تعيين المتغير $PHP_AUTH_USER. إذا لم يتم تعيينها، فهذا يعني أن المصادقة مطلوبة. يرسل البرنامج النصي رأس رقم خطأ HTTP 401 لإخبار متصفح العميل بأن المصادقة مطلوبة. ينبثق متصفح العميل نافذة مصادقة، مما يطالب المستخدم بإدخال اسم المستخدم و بعد اكتمال الإدخال، تحقق من صحة اسم المستخدم وكلمة المرور. إذا كان ذلك صحيحًا، فاسمح بتسجيل الدخول بتنفيذ العمليات ذات الصلة. إذا كان غير صحيح، فاستمر في مطالبة المستخدم بإدخال اسم المستخدم وكلمة المرور.
وصف الوظيفة:
1. isset(): يستخدم لتحديد ما إذا كان قد تم تعيين قيمة للمتغير. اعتمادًا على ما إذا كانت قيمة المتغير موجودة، قم بإرجاع صحيح أو خطأ
2. header(): يستخدم لإرسال رؤوس HTTP محددة. لاحظ أنه عند استخدام الدالة header()، تأكد من استدعائها قبل أي كود HTML أو PHP ينتج المخرجات الفعلية.
3.mysql_connect (): افتح اتصال خادم MySQL.
4.mysql_db_query (): أرسل سلسلة الاستعلام (الاستعلام) إلى قاعدة بيانات MySQL.
5.mysql_fetch_row(): يُرجع كل حقل من عمود واحد.
2. استخدم الجلسة لتنفيذ التحقق من الخادم،
بالنسبة للصفحات التي تتطلب المصادقة، فمن الأفضل استخدام التحقق من خادم Apache. ومع ذلك، فإن واجهة التحقق من خادم Apache ليست ودية بما فيه الكفاية. علاوة على ذلك، لا يمكن التحقق من PHP في وضع CGI وPHP ضمن IIS باستخدام خادم Apache. بهذه الطريقة يمكننا استخدام الجلسة لحفظ هوية المستخدم بين الصفحات المختلفة لتحقيق التحقق من الهوية.
على الواجهة الخلفية، نستخدم أيضًا قاعدة بيانات Mysql أعلاه لتخزين معلومات المستخدم.
نكتب أولاً واجهة تسجيل دخول المستخدم، اسم الملف هو login.php، الكود هو:
______________________________________________
<form action="login1.php">
اسم المستخدم:<input type="text" name="name"><br>
كلمة المرور :<input type="text" name="pass"><br>
<input type="submit" value="Login">
</form>
________________________________________________
يقوم تسجيل الدخول1.php بمعالجة النموذج المقدم، الكود كما يلي:
$ db=mysql_connect ("localhost"، "root"، "")؛
mysql_select_db("XinXiKu",$db);
$result=mysql_query("SELECT * FROM user Where name='$name' وكلمة المرور='$pass'"،$db);
إذا ($myrow = mysql_fetch_row($result)) {
//تسجيل المستخدم
session_start();
session_register("المستخدم");
$user=$myrow["user"];
// تم التحقق من الهوية بنجاح، قم بتنفيذ العمليات ذات الصلة
...
} آخر {
صدى "فشلت المصادقة، ليس لديك إذن لمشاركة موارد الشبكة!";
}
?>
تجدر الإشارة هنا إلى أنه يمكن للمستخدمين استخدام **http://domainname/next.php?user=username** في العمليات اللاحقة لتجاوز المصادقة. لذلك، يجب أن تتحقق العمليات اللاحقة أولاً مما إذا كان المتغير مسجلاً: إذا تم تسجيله، فقم بإجراء العملية المقابلة، وإلا فسيتم اعتباره تسجيل دخول غير قانوني. الكود ذو الصلة هو كما يلي:
session_start();
إذا (!session_is_registered("user")){
صدى "فشلت المصادقة، تسجيل الدخول غير قانوني!";
} آخر {
//تم تسجيل الدخول بنجاح لإجراء العمليات ذات الصلة
...
}
?>
الملحق: كيفية تثبيت PHP في وضع الوحدة النمطية
1. قم أولاً بتنزيل الملف: mod_php4-4.0.1-pl2. [إذا لم يكن جهازك PHP4، فقم بالترقية في أقرب وقت ممكن!]
بعد فك الضغط، توجد ثلاثة ملفات: mod_php4.dll، mod_php4.conf، readme.txt
2. انسخ الملفات ذات الصلة
mod_php4.dll إلى دليل الوحدات النمطية
انسخدليل تثبيت Apache.
mod_php4.conf إلى دليل conf الخاص بدليل تثبيت Apache.
انسخ ملف msvcrt.dll إلى دليل تثبيت Apache.
3. افتح ملف conf/srm.conf وأضف الجملة
Include conf/mod_php4.conf.
للقيام بذلك، يرجى إزالة جميع بيانات الإعداد الخاصة بوضع CGIفي
httpd.conf، أي الجزء المشابه لما يلي!
تطبيق AddType/x-httpd-php4 .php
تطبيق AddType/x-httpd-php4 .php3
تطبيق AddType/x-httpd-php4 .php4
تطبيق الإجراء/x-httpd-php4 /php4/php.exe
إذا كنت تريد جعل PHP يدعم المزيد من اللواحق، فلا مشكلة. ملف التكوين المحدد mod_php4.conf يدعم بالفعل ثلاث لواحق: php، php3، وphp4. إذا كنت تريد دعم المزيد من اللواحق، يمكنك تغيير هذا الملف.
4.
استخدم <?phpinfo(); سترى أن قيمة Server API هي apache، وليست cgi، وهناك أيضًا معلومات حول معلومات رؤوس HTTP.