تغطية مباشرة لأحداث منتدى الإعلام الجديد المقام بمدينة أبوظبي
هل تقترح تمديد مسابقة سوالف كاست؟

 

العودة   سوالف سوفت > قسم تطوير وبرمجة المواقع للمتقدمين > PHP
المدوّنات البحث مشاركات اليوم اجعل كافة المشاركات مقروءة

رد  
 
LinkBack أدوات الموضوع
مشرف قسم ويب 2.0 و البرمجة القياسية
تاريخ التسجيل: Aug 2004-
#1 (permalink)  
عمل نظام تسجيل بنظام الجلسات


بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

سنتناول فى هذا الدرس كيفية عمل صفحات مؤمنة (تتطلب تسجيل دخول) استخدام الجلسات (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 فى اول الصفحة وهذا يمكنك تكراره مع اى عدد من الصفحات التى ترغب فى تامينها.

وفى النهاية أسأل الله ان اكون وفقت فى شرح هذا المثال وان يقدم لكم الفائدة.

ملحوظة :- هذا مثال الغرض منه هو التعلم ولا يمكن ان اقدم لكم اى مسئولية عن مستوى الامان الذى يوفره هذا المثال ....
ساقوم بارفاق ملف مضغوط به جميع الملفات المستخدمة بهذا المثال






الملفات المرفقة
نوع الملف: zip sess.zip‏ (2.7 كيلوبايت, المشاهدات 458)
Akwad Net غير متواجد حالياً   قديم 05-07-2005, 12:53 AM
رد مع اقتباس
صاحب موقع مهارات سوفت
تاريخ التسجيل: Apr 2004-
#2 (permalink)  

جميل ورائع .

واستمر في هذا الابداع ..

والى الامام ..

وان شاء الله في اقرب فرصة سأقوم بتطبيق كل ما ذكرت ..


والف الف شكر لك ..




وخالص المودة ،،






__________________
██████████
██████████
██████████


مهارات سوفت
مهارات سوفت للبرامج وتطوير المواقع والمنتديات والتبادل التجاري.


للتواصل ..
00967733873335

باب الحارة .. للبيع ..!!
مُجَاهِد غير متواجد حالياً   قديم 05-07-2005, 12:58 AM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Feb 2002-
#3 (permalink)  

أحسنت وبارك الله فيك وجعل تعبك في الشرح في ميزان عملك أخ ولع

لديك الكثير ونتمنى أن تجد لمثل هذه الدروس وقتا .. وليتك تشرح لنا طرق التعامل مع PHP عن طريق الفلاش فأنت مبدع في هذا

تحياتي لك






__________________
ومامن كاتب إلا سيفنى ****** ويبقي الدهر ماكتبت يداه
فلا تكتب بكفك غير شيء ****** يسرك يوم القيامة أن تراه
Dr.Server غير متواجد حالياً   قديم 05-07-2005, 05:34 AM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Feb 2004-
#4 (permalink)  

مشكوووور اخوي Wala3 CArds
ماقصرت والله على الشرح الوافي والف شكر
اخوك






__________________
NaMe : MsH3AL. M. Al-ShAmMrie
SiTe : http://WwW.MsH3AL.CoM
EMaiL : Ze3Ex@HotMail.CoM
MSH3AL غير متواجد حالياً   قديم 05-07-2005, 08:58 AM
رد مع اقتباس
عضو فعال جدا
تاريخ التسجيل: Dec 2004-
#5 (permalink)  

سلام عليكم يا اخى

ما شاء الله الشرح وافى وسهل وبسيط

لكن ابى اسأللك سوال

انا ابى انة يستدعى اليوزر نيم والباسوردد من قاعدة البيانات


يعنى اقدر انى اضيف يوزر نيم وباسورد

يا ريت تكون فهمت قصدى

منتظر ردك

وشكرا مرة تانية






__________________
مجموعة تى ان تى العربية لخدمات الانترنت
استضافة - ريسيلر - نطاقات - برمجة
فريق التصميم لخدمات التصميم
النطاقات العربية لخدمات تسجيل النطاقات
تى ان تى لخدمات الاستضافة

msn: sales@arabtnt.com
easylink.com.eg غير متواجد حالياً   قديم 07-07-2005, 04:47 PM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Jul 2003-
#6 (permalink)  

جميل .. تسلم يدك

ولكن لو حبينا " تذكرني " أو " لا تتذكرني " ؟

لازم كوكيز






__________________
النسخة الثانية من ابلود بلس قريبا جدا :
+ شريط مئوي لرفع الملفات
+ دعم اكثر من سيرفر لرفع الملفات Multi-Server
+ مكتبة ملفات مؤرشفة
Egyptechno غير متواجد حالياً   قديم 07-07-2005, 06:48 PM
رد مع اقتباس
-
#7 (permalink)  

مشكورررررررررررر






  قديم 30-07-2005, 11:08 AM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Jun 2000-
#8 (permalink)  

درس جميل وبسيط
جهد تشكر عليه يا اخي الكريم


اقتباس:
المشاركة الأصلية كتبت بواسطة easylink.com.eg
سلام عليكم يا اخى

ما شاء الله الشرح وافى وسهل وبسيط

لكن ابى اسأللك سوال

انا ابى انة يستدعى اليوزر نيم والباسوردد من قاعدة البيانات


يعنى اقدر انى اضيف يوزر نيم وباسورد

يا ريت تكون فهمت قصدى

منتظر ردك

وشكرا مرة تانية

استبدل شرط صحة اليوزر والباسوورد الموجود هنا

كود:
4-	if($_POST['user_pw'] == $password && $_POST['user_un'] == $username){
5-		$_SESSION['admin'] = true;
وضع مكانه الاستدعاء من قاعدة البيانات مع التحقق بالطبع من الصحة

وأذا محتاج مساعدة نحن حاضرين






الإماراتي غير متواجد حالياً   قديم 31-07-2005, 02:20 AM
رد مع اقتباس
عضو فعال جدا
تاريخ التسجيل: Jun 2003-
#9 (permalink)  

شكرا لك .






__________________
htaccess بكل بساطة

الشفرة الموحدة "يونِكود"

(إن من مفاسد هذه الحضارة أنها تسمي الاحتيال ذكاءً، والانحلال حرية، و"الرذيلة فناً" والاستغلال معونة) - مصطفى السباعي
jadweb.com غير متواجد حالياً   قديم 01-08-2005, 01:40 AM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Nov 2003-
#10 (permalink)  

السلام عليكم اخوي الإماراتي ممكن توضح لي كيف معليش تحملني






__________________
مع تحياتي
مرعب نجد غير متواجد حالياً   قديم 13-08-2005, 03:39 AM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Jun 2000-
#11 (permalink)  

اخوي مرعب نجد

حاول تقرأ الدرس مرة ثانية وركز على هالنقطة :
ان الجلسات شي مختلف تماما عن " التحقق من اليوزرنيم والباسوورد "


انت من خلال هالشرح الجميل والمرتب راح تتمكن ان شاء الله من تسجيل الجلسات حتى تتمكن من نقل المعلومات بين الملفات مثلاً

اذا كانت عندك عدة ملفات في مجلد admin على سبيل المثال
وتريد تحميها بحيث ما يدخل عليها الا الاعضاء المخولين
لازم تتأكد من امتلاك الزائر للجلسة اللي تخوله للدخول في كل ملف من الملفات المتواجدة في هذا المجلد
يعني باختصار ضع هذا الامر في بداية كل ملف

كود PHP:
<?php
require('sess.php');
?>
الأمر هذا راح يتأكد من امتلاك الزائر للجلسة من عدمه

وهذا هو المطلوب منك فهمه في هذا الدرس
بالاضافة طبعا الى عمليات تسجيل الجلسة نفسها واظهار فورم تسجيل الدخول ومسح الجلسات كذلك !! ( اعتقد ان الاخ ما تطرق لهالنقطة الضرورية )

اما إن كنت ترغب بالتحقق من اليوزرنيم والباسوورد من خلال قاعدة بيانات بها هذه المعلومات فهذا أمر آخر مختلف عن اساسيات الجلسات ولن يتداخلا إلا في منطقة واحدة هي اثناء تسجيل الجلسة فقط لا غير في الغالب

يعني الشرح الموجود في هذا الموضوع حاليا يقوم بالتأكد من بيانات العضو ومطابقتها بالقيم الموجودة في ملف config
بينما في حال استخدام جدول في قاعدة البيانات يحتوي على اسماء الاعضاء والباسوورد فانت لن تحتاج لملف ال config
بل ستحتاج لقراءة جميع الخلايا الموجودة في قاعدة البيانات والتأكد من تواجد هذا العضو وكلمة المرور ، فإذا كان هذا الاسم موجود في قاعدة البيانات وكلمة المرور صحيحة
تقوم بتسجيل الجلسة
واذا لم يكون هذا العضو موجود ( أو كانت كلمة المرور خاطئة )
لا تقوم بتسجيل الجلسة

والسلام عليكم !!

طبعا مسألة القراءة من قاعدة البيانات هي مسألة منفصلة وما اعتقد ان مجرد "رد" راح يكفي لايضاح النقطة
عموماً في موضوع ممكن يساعدك موجود حاليا في المنتدى
العنوان : http://www.swalif.net/softs/showthread.php?t=39706


طبعا اذا فهمت كلمة من الكلام الممل اللي انا كتبته
فما عليك الا انك تقوم بما قلته في السابق

كود:
if($_POST['user_pw'] == $password && $_POST['user_un'] == $username){
$_SESSION['admin'] = true;
الكود هذا راح يتأكد من اليوزرنيم والباسوورد ويقارنهما بالبيانات المتواجدة في ملف config ( السطر الاول " جملة شرط if " )
واذا كانت صحيحة راح يقوم بتسجيل الجلسة ( السطر الثاني )
كل المطلوب منك فعله هو :
تعديل جملة الشرط " if " بحيث تستبدله بامر قراءة من قاعدة البيانات لقراءة جميع البيانات المتواجدة في جدول الاعضاء ومطابقتها بالقيم اللي ارسلها الزائر ، وفي حال تطابق البيانات تقوم بتنفيذ السطر الثاني

واذا احتجت اي مساعدة بامكانك اضافتي على الماسنجر لاني كتبت هذا الرد على عجالة ومشغول جداً حالياً
IT_student@msn.com






الإماراتي غير متواجد حالياً   قديم 13-08-2005, 10:21 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Nov 2003-
#12 (permalink)  

مشكوووور اخوي الإماراتي والله تعبتك معاي لكن الشي اللي كنت ابحث عنه هو هذا الحل
اقتباس:
كل المطلوب منك فعله هو :
تعديل جملة الشرط " if " بحيث تستبدله بامر قراءة من قاعدة البيانات لقراءة جميع البيانات المتواجدة في جدول الاعضاء ومطابقتها بالقيم اللي ارسلها الزائر ، وفي حال تطابق البيانات تقوم بتنفيذ السطر الثاني
والحمد لله استطعت الإتصال من قاعدة البيانات والتحقق من اسم المستخدم وكلمة المرور وهذا كله بفضل الله ثم بخبرتك
اخوي الإماراتي أضفت بريدك الإلكتروني لأني حاب استشيرك في شي بسيط جدا <===طولها
وهذا بريدي akah84@msn.com






__________________
مع تحياتي
مرعب نجد غير متواجد حالياً   قديم 14-08-2005, 09:12 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: Jun 2003-
#13 (permalink)  

السلام عليكم و رحمه الله و بركاته

مشكور اخى Wala3 CArds
فعلا شرح وافى بارك الله فيك






__________________
سبحان الله
الحمد لله
لا إله إلا الله
الله أكبر

يستخدم هذا الحساب 3 أشخاص
mta غير متواجد حالياً   قديم 15-08-2005, 03:06 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Nov 2003-
#14 (permalink)  

مراحب أخواني نفذت الطريقة مية المية وانا اعتمدت طريقة قاعدة البيانات
لكن مع الأسف اكتشفت اني لما اعمل تسجيل دخول باي اسم مستخدم وكلمة مرور مسجلة داخل قاعدة البيانات يعملي دخول اوكيه لكن الجلسة تسجل باسم مستخدم هو 1 وكلمة مرور هي 1
وهذي المشكلة عقدتي والله






__________________
مع تحياتي
مرعب نجد غير متواجد حالياً   قديم 21-08-2005, 07:50 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: May 2007-
#15 (permalink)  

شكراً أخ Akwad Net على الدرس الجيد


لكن كان ينقص عملية تسجيل خروج

ولعمل ذلك قم بتعديل الآتي

تعديل ملف index.php بإضافة رابط تسجيل الخروج

كود PHP:
<?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>
<br>
<a href="logout.php">تسجيل الخروج</a>
</center>
</body>
</html>

إضافة صفحة تسجيل الخروج logout.php

كود PHP:
<?php
session_start
();
session_destroy();
?>
<html>
<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>
<?php
exit;
?>
تم إستخدام دالة session_destroy لإنهاء الجلسة و بالتالي تنفيذ عملية الخروج

و بالمرفقات جميع الملفات بعد إضافة تسجيل الخروج






الملفات المرفقة
نوع الملف: zip sess.zip‏ (3.2 كيلوبايت, المشاهدات 102)
__________________
http://tv.mehalla.net
Hazem Noor غير متواجد حالياً   قديم 18-07-2007, 12:36 AM
رد مع اقتباس
رد


 

أدوات الموضوع

تعليمات المشاركة
لا تستطيع كتابة مواضيع
لا تستطيع كتابة ردود
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

كود [IMG] متاحة
كود HTML معطلة
Trackbacks are متاحة
Pingbacks are متاحة
Refbacks are متاحة



الساعة الآن: 07:51 AM بتوقيت المملكة العربية السعودية