بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
سنتناول فى هذا الدرس كيفية عمل صفحات مؤمنة (تتطلب تسجيل دخول) استخدام الجلسات (sessions)
فى البداية الجلسات , هى وسيلة لارسال بيانات من صفحة لاخرى مثلا عندما تتنقل بين صفحات المنتدى المختلفة يمكن استخدام الجلسات لارسال اسم المستخدم عبر الصفحات
ال PHP بدءا من الاصدار 4 (منذ فترة طويلة) بدأت تدعم الجلسات عبر موديول خاص يوفر بعض الوظائف التى تمكن من تنفيذ هذا الامر
الان فى مثالنا هذا نرغب فى عمل صفحات لا يمكن الوصول لها الا بعد اجرا تسجيل دخول والتاكد من صحة المستخدم وكلمة المرور (لوحة تحكم مثلا)
الصفحات التى سنتسخدمها
index.php (الصفحة المرغوب تامينها)
sess.php (ملف خاص للتاكد من تنفيذ تسجيل الدخول)
login.php (الملف الذى يتم من خلاله تسجيل الدخول)
config.php (ملف التظبيطات والذى يحوى اسم المستخدم وكلمة المرور)
err.html (الصفحة التى تظهر للزائر قبل تسجيل الدخول والتى توجهه الى صفحة التسجيل)
done.html (صفحة الترحيب بعد اتمام التسجيل والتى توجهه الى لوحة التحكم)
اولا الملف login.php
هو الملف المسئول عن اتمام عملية التسجيل منهجية عمله هى اتاحة الفرصة للزائر بادخال البيانات ومقارنة هذه البيانات بالموجود بملف config.php, وحال ما تطابقت البيانات تقوم بتسجيل متغير session يتم استخدامه فيما بعد.., اما إذا اعطى بيانات خاطئة تظهر له صفحة إدخال البيانات مرة اخرى.
الكود
كود:
<?php
session_start();
1-if($_SESSION['admin']) exit;
2-if(isset($_POST['user_pw'])){
3- require('config.php');
4- if($_POST['user_pw'] == $password && $_POST['user_un'] == $username){
5- $_SESSION['admin'] = true;
6- require('done.htm');
7- exit;
}
}
?>
<html dir="rtl">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
<title>تسجيل دخول</title>
<link href="css.css" rel="stylesheet" type="text/css">
</head>
<body>
<div class="announce">
<div>من فضلك قم بتسجيل الدخول اولا</div>
</div>
<form action="login.php" method="post">
<fieldset class="fieldset">
<legend> تسجيل دخول </legend>
<table width="460" align="center">
<tr>
<td>
اسم المستخدم
</td>
<td><input type="text" name="user_un" dir="ltr"></td>
</tr>
<tr>
<td>
كلمة المرور
</td>
<td><input type="password" name="user_pw" dir="ltr"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="ارســـــــال"></td>
</tr>
</table>
</fieldset>
</form>
</body>
</html>
<?php
exit;
?>
شرح موجز عن هذا الكود فى السطر الاول نجرى اختبار للتاكد من وجود متغير الجلسات المسمى admin , متغير جلسات لانه موجود بالمصوفة _SESSION
فإذا كان هذا المتغير موجود بالفعل دل ذلك على ان هذا الزائر قد قام بتسجيل دخول ناجح من قبل ومن ثم يتم الخروج من ملف login
فى السطر الثانى نختبر وجود المتغير user_un والذى يتم ارساله من خلال النموذج بالطريقة POST لذلك وجوده يعنى لنا ان البيانات قد تم ارسالها من النموذج وإن لم يكن فالطبع سنطبع له نموذج html ليقوم بتعبئة البيانات ثم يرسلها,, ولكن الان لنفترض ان البيانات قد ارسلت, لذلك سننتقل الى السطر 3
فى هذا السطر يتم استدعاء ملف الكونفيج والذى يحمل بيانات الدخول كما ذكرنا.
فى السطر 4: يتم مقارنة البيانات التى قام الزائر بادخالها بالبيانات الموجودة بملف الكونفيج, إذا تحقق هذا الشرط ننتقل الى السطر 5,
فى السطر 5: يتم تسجيل متغير عبر الجلسات وهو متغير admin وهذا المتغير الذى سنستخدمه فيما بعد للتحقق من تسجيل دخول الزائر ام لا.
اما فى السطر 6: فيتم استدعاء ملف done وهو ملف تم تجهيزه كرسالة ترحيبية ينقل الزائر بعدها الى الصفحة الرئيسية بعد اتمام الدخول بنجاح
السطر 7: يقوم بانهاء عمل السكريبت وذلك حتى لايظهر نموذج ال html مرة اخرى
---------
الجز الثانى من صفحة اللوجن هو نموذج ال html اعتقد ما يحتاج لتوضيح فقط ان الصفحة المستهدفة من النموذج action ترسل الى نفس صفحة اللوجن واوضحنا كيف يتم ذلك من خلال التحقق من وجود متغير فى المصفوفة POST ام لا
,,,,,,,,,,,,
وهكذا انهينا الجزء الاهم فى هذا الدرس,,
ننتقل الى الصفحة sess.php
هذه نقوم باستدعائها فى كافة الصفحات التى نرغب فى تامينها,, لانها تقوم بالتحقق من وجود متغير الجلسات admin والذى وجوده يدل على اتمام التسجيل بنجاح وان لم يوجد يقوم هذا الملف باظهار رسالة خطا توجب التسجيل اولا ثم تقوم بانهاء عمل الصفحة
الكود
كود PHP:
<?php
1-session_start();
2-if(! $_SESSION['admin']){
3- require('err.htm');
4- exit;
}
?>
فى السطر الاول نجد استدعاء الدالة session_start وهو تقوم ببدء عمل الجلسات (ساحاول إن شاء الله شرح الجلسات بالتفصيل فى درس قادم)
فى السطر 2- نتحقق من وجود متغير الجلسات admin والذى بعدم وجوده ندرك ان هذا الزائر لم يقم بتسجيل الدخول "لاحظ علامة النفى ! " وعندها ننتقل للسطر 3
فى السطر 3 نقوم باستدعاء ملف err وهو ملف يظهر رسالة خطا ويقوم بتوجيه المتصفح الى صفحة الدخول لوجن, ثم نقوم انهاء عمل باقى الصفحة فى السطر 4
(لاحظ انه فى حالة وجود متغير الجلسات عندها لن يتحقق قاعدة الجملة الشرطية مما يعنى ان باقى الصفحة سيتم ظهوره بشكل طبيعى وهذا هو ما نرغبه لمن قام بتسجيل الدخول)
----------------------------------------
الملف config.php
هو الملف الذى يحتوى على كلمة المرور واسم المستخدم
كود PHP:
<?php
$username = 'admin';
$password = 'pass';
?>
بالطبع يمكنك تغيير القيم الى ما تريد
----------------------------------------
الملف done.html
هو الملف الذى يظهر رسالة ترحيب بعد اتمام تسجيل الدخول ثم يقوم بتوجيه المتصفح الى الصفحة الرئيسية
كود HTML:
<html dir="rtl">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
<meta http-equiv="refresh" content="3;URL=index.php">
<title>تسجيل دخول ناجح</title>
</head>
<body>
<div style="text-align:center; background-color: #EBEBEB; border-top: 1px solid #FFFFFF; border-left: 1px solid #FFFFFF; border-right: 1px solid #AAAAAA; border-bottom: 1px solid #AAAAAA; font-weight : bold;">
<h4>تم تسجيل الدخول بنجاح </h4>
<p>سيتم نقلك تلقائيا او قم <a href="index.php">بالضغط هنا</a></p>
<div>
</body>
</html>
لاحظ العنوان الموجود والذى يتم التحويل اليه بالتاكيد يمكنك اختيار اى مسار اخر للتحويل
------------------------------------
الملف err.html
والذى يظهر للزائر رسالة خطا عند محاولته الوصول لصفحة مؤمنة دون تسجيل الدخول ثم يقوم بتوجيه المتصفح الى صفحة الدخول
كود HTML:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
<meta http-equiv="refresh" content="3;URL=login.php">
<title>انت غير مسجل</title>
</head>
<body>
<div style="text-align:center; background-color: #EBEBEB; border-top: 1px solid #FFFFFF;
border-left: 1px solid #FFFFFF; border-right: 1px solid #AAAAAA; border-bottom: 1px solid
#AAAAAA; font-weight : bold;">
<h4>يتوجب عليك تسجيل الدخول اولا</h4>
<p> سيتم نقلك الان تلقائيا او قم <a href="login.php">بالضغط هنا</a></p>
<div>
</body>
</html>
-----------------------------------------
واخيرا الصفحة index.php وهى الصفحة التى نرغب فى تامينها فقط كلما يهم هو استدعاء الملف sess فى بداية هذا الملف
كود:
<?php
require('sess.php');
?>
<html dir="rtl">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
<title>لوحة التحكم</title>
</head>
<body>
<center><h3>مرحبا بك فى لوحة التحكم الخاصة</h3></center>
</body>
</html>
لاحظ ان كل ما يهمنا هو استدعا الملف sess.php فى اول الصفحة وهذا يمكنك تكراره مع اى عدد من الصفحات التى ترغب فى تامينها.
وفى النهاية أسأل الله ان اكون وفقت فى شرح هذا المثال وان يقدم لكم الفائدة.
ملحوظة :- هذا مثال الغرض منه هو التعلم ولا يمكن ان اقدم لكم اى مسئولية عن مستوى الامان الذى يوفره هذا المثال ....
ساقوم بارفاق ملف مضغوط به جميع الملفات المستخدمة بهذا المثال