• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

البحث في المنتدى

Showing results for tags 'php5 et les sessions'.

  • البحث بالتاقات

    اكتب الكلمات المفتاحيه بينها علامه الفاصله
  • البحث بكاتب الموضوع

تم إيجاد 2 نتيجة

  1. السلام عليكم ورحمة الله وبركاته هذا الدرس ضمن سلسة دروس الدورة التالية لتعلم لغة php ! الجلسات و الكعكات في php . في الدروس السابقة لقد تعلمنا كيف نقوم بإنشاء نموذج لعملية تسجيل المستخدم و كيفية التحقق من مدخلاته عن طريق التعابير النظامية , اليوم سوف نتعلم كيفية استخدام الكعكات والجلسات لجعل برنامجنا أكثر تفاعلية . الكعكات cookies : هي ملفات نصية صغيرة تستخدمها المواقع للتعرف على المُستخدم (مثلا ً) ويُخزنها المتصفح على جهاز المستخدم , ويكون لكل متصفح كعكات منفصلة عن المتصفحات الأخرى . والبيانات المُخزنة في الكعكات لا يُمكن لأي موقع أن يصل إليها بإستثناء الموقع الذي قام بتخزينها . مثال عن الكعكات : الكعكات التي يحفظها منتدى الفريق العربي للبرمجة , والتي تحوي اسم المستخدم حيث لا نحتاج لكتابة اسم المستخدم و كلمة المرور في كل مرة نقوم بتسجيل الدخول الى المنتدى . طريقة استخدام الكعكات : وذلك بواسطة الدالة setcookie حيث يكون شكلها العام كالتالي : setcookie($name, $value, $expire, $path, $domain, $secure, $httponly);بشكل عام الوسيط الاجباري الوحيد هو الوسيط الأول , لكن عندما نُريد أن نُخزن قيمة ما في الكعكة يلزمنا على الأقل استخدام أول وسيطين , حيث الوسيط الثاني هو القيمة المُسندة الى هذا المتغير مثال : setcookie('name', 'omar');حيث تم حفظ القيمة omar في متغير تابع للكعكات اسمه name , ويمكن استرجاع القيمة بواسطة المصفوفة $_COOKIE التي تكون عناصرها مكونة من جميع المتغيرات التابعة للكعكات : echo $_COOKIE['name']; #سيتم طباعة omarلكن , وبما أننا لم نعين قيمة لوقت الانتهاء expire time , فإنها تأخذ القيمة 0 وهذا يعني أن الكعكة سوف تُحذف عندما نُغلق المتصفح , أما الكعكة التالية فسوف تُحذف بعد مرور يوم كامل , لأن الدالة time تُعيد الوقت الحالي , ومن ثم نُضيف له 60*60*24 اي يوم كامل مُقدرا ً بالثواني : setcookie('name', 'omar', time() + 60 * 60 * 24);المسار path يمكن وضع قيمة لهذا المدخل اذا أردنا ان نجعل الكعكة متاحة لجزء من الموقع , مثلا إذا كانت قيمة path"/example" تجعل الكعكة متاحة للمجلد example فقط بينما "/" تجعلها متاحة لجميع المجلدات في الموقع : setcookie('name', 'omar', time()+ 60*60*24, '/');اما الوسيط $secure فيأخذ true أو false ويشير الى أن الكعكعة يجب ان يتم نقلها بواسطة اتصال آمن عن طريق HTTPS وتكون قيمتها الافتراضية false . أما الوسيط الاخير $httponly فيشير الى ان الكعكة لا يمكن الوصول اليها الا عن طريق بروتوكول HTTP وهذا يعني ان القيم المُخزنة في الكعكة لا يمكن الوصول اليها عن طريق javascript على سيبل المثال . مثال عن الكوكيز : سنقوم بهذا المثال بإنشاء نموذج يُمكن المُستخدم من ادخال اسمه ومن ثم حفظه ككعكة , قم بحفظ الملف التالي باسم index.html : <html> <head> <title>cookies and sessions example</title> </head> <body> <form action="file1.php" method="get"> please enter your name : <input type="text" name="name"> <input type="submit" value="send"> </form> </body></html> اما الكود التالي فيقوم بمعالجة اسم المُستخدم الذي ارسل من صفحة index.html , انشء ملف باسم file1.php واكتب الكود التالي بداخله :   <?phpif(isset($_GET['name'])){ setcookie('name', $_GET['name'], time() + 60 * 60 * 24); echo 'welcome '.$_GET['name'].' the cookie "name" is set to '.$_GET['name']; echo '<br>please go to <a href="2.php">page 2</a> to test the cookies';}else{ if(isset($_COOKIE['name'])) { $name = $_COOKIE['name']; echo "your name is $name this is done using cookies ;)"; } else { echo 'please enter your name in the first <a href="index.html">page</a>'; }}?> في بداية الكود تأكدنا من ارسال name عبر طريقة get (راجع درس النماذج لمزيد من المعلومات) , وبعد التأكد قمنا باستخدام setcookie لحفظ كعكة تحوي اسم المستخدم ومن ثم اظهرنا الرسالة الترحيبية و رابط للصفحة file2.php , واذا فتح المستخدم الصفحة مباشرة فنحن بمواجهة حالتين : الحالة الاولى الكعكة محفوظة في جهاز المستخدم فيتم الترحيب به اما الحالة الثانية فلا يوجد كعكة فنطلب من المستخدم تسجيل اسمه في الصفحة الاولى index.html قم بحفظ الكود التالي بملف باسم file2.php في نفس المجلد السابق :     <?phpecho 'Hello '.$_COOKIE['name'].' this is another page and the cookie is stil alife';?>حذف الكعكات : يوجد عدة طرق لحذف كعكة مثلا لحذف الكعكة السابقة يمكن استخدام ما يلي :     <?phpsetcookie('name');setcookie('name', ''); #استخدام قيمة فارغةsetcookie('name', '', time() - 3600); #جعل وقت الانتهاء يشير الى وقت سابق?>الجلسات Sessions : الجلسة هي آلية لتتبع المستخدم وهو يقوم بمختلف العمليات داخل الموقع حيث يتم تخزين هذه البيانات على جهاز السيرفر عوضا عن حفظها على جهاز المستخدم كما هو الحال في الكوكيز , لكل مستخدم id خاص به يسمى session id او اختصارا sid لبدأ الجلسة يجب تضمين session_start في راس كل صفحة نود استخدام الجلسات فيها , وكما في الكوكيز لا يجوز طباعة أي محرف قبل بدأ الجلسة . يتم اضافة متغير خاص بالجلسة مباشرة عن طريق المصفوفة $_SESSION على الشكل :     $_SESSION['var'] = value;ولحذف متغير خاص بالجلسات يمكن اسناد قيمة فارغة له او باستخدام الدالة unset :     unset($_SESSION['name']); الان سوف نقوم بإضافة الجلسات الى الدرس السابق , حيث سنقوم باستخدام متغير خاص بالجلسات اسمه username , و عندما يقوم المستخدم بتسجيل دخوله فإن قيمة هذا المتغير ستحوي اسم المستخدم , وسوف يتم تحويل المستخدم الى الصفحة الرئيسية index.php التي تقوم بإظهار رسالة ترحيب بالمستخدم اذا كان قد قام تسجيل دخوله , وفي حال لم يتم تسجيل الدخول سوف يتم تحويله الى الصفحة login.php . الملف login.php سيتم تغيير محتواه حتى يصبح كالتالي :   <?phpheader('Content-Type: text/html; charset=utf-8');session_start();if (isset($_SESSION['username']) AND $_SESSION['username'] != ''){ header("location:index.php"); exit();}?> <!DOCTYPE html><html dir="rtl"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title> تسجيل الدخول </title> <link href="style.css" rel="stylesheet" type="text/css" /> </head> <body> <div class="mainLayout"> <div class="header"> <a href="index.php"> الرئيسية </a> <a href="login.php"> تسجيل الدخول </a> <a href="signup.php"> تسجيل مستخدم جديد </a> </div> <div class="content"> <form action="login.php?action=submit" method="POST"> <table> <tr> <td><label> اسم المستخدم : </label></td> <td><input type="text" name="username"></td> </tr> <tr> <td><label> كلمة المرور : </label> <td><input type="text" name="password"><br> </tr> <tr> <td colspan="2"><input type="submit" name="submit" value="تسجيل الدخول"></td> </tr> </table> </form> <?php if (isset($_GET['action']) and $_GET['action'] == 'submit') { if (isset($_POST['username']) and $_POST['username'] != null and isset($_POST['password']) and $_POST['password'] != null) { $username = preg_replace('/[^a-zA-Z0-9._-]/', '', $_POST['username']); $password = preg_replace('/[^a-zA-Z0-9]/', '', $_POST['password']); if (login($username, $password)) { echo "<h3 style='color:#0F0;'> تم تسجيل الدخول مرحباً بك <h3>"; $_SESSION['username'] = $username; echo "<h5 style='color:#0F0;'> جاري تحويلك للصفحة الرئيسية ... <h5>"; echo ' <script type="text/javascript"> setTimeout(function () { window.location.href = "index.php"; }, 2000); </script> '; } else { echo "<h3 style='color:#F33;'> لم تتم عملية تسجيل الدخول حاول مجدداً <h3>"; } } else { echo "<h3 style='color:#F33;'>يرجى ملئ جميع الحقول<h3>"; } } ?> </div> <div class="footer"> <span > حقوق كذا وكذا محفوظة لشركة كذا وكذا :) </span><br /> </div> </div> </body></html><!-- هنا أكواد الدوال --><?phpfunction login($username, $password) { $jsonData = file_get_contents('login.json') or die("لم يتم جلب محتوى الملف"); $data = json_decode($jsonData, true); foreach ($data as $value) { if ($value['username'] == $username and $value['password'] == $password) return true; } return false;}?> احد ابرز التغيرات عن الدرس الماضي هو في بداية الكود عندما قمنا ببدء جلسة ومن بعددها قمنا بالتحقق من وجود متغير الجلسة "username" فاذا حاول المستخدم الدخول الى هذه الصفحة بعد ان قام بتسجيل الدخول سيتم تحويله الى الصفحة الرئيسية عن طريق الدالة header . وايضا اختلاف آخر رئيسي هو عند تحقق شرط صحة اسم المستخدم و كلمة مروره عندها سيتم تخزين متغير الجلسة . وبالتالي سوف تكون صفحة index.php على الشكل التالي :   <?phpheader('Content-type: text/html; charset=utf-8');session_start();if (!isset($_SESSION['username']) AND !isset($_SESSION['password'])) { header("location:login.php"); exit();}?><!DOCTYPE html><html dir="rtl"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title> الصفحة الرئيسية </title> <link href="style.css" rel="stylesheet" type="text/css" /> </head> <body> <div class="mainLayout"> <div class="header"> <a href="logout.php">تسجيل خروج</a> </div> <div class="content"> <h3> مرحباً بك في الصفحة الرئيسية <?php echo$_SESSION['username']; ?> </h3> </div> <div class="footer"> <span > حقوق كذا وكذا محفوظة لشركة كذا وكذا :) </span><br /> </div> </div> </body></html> لا داعي لشرح الكثير لانها مفهومة لكن لاحظ اننا قمنا بوضع رابط لصفحة logout.php بدلا عن الروابط السابقة , سيكون محتوى صفحة logout.php كالتالي :     <?phpheader('Content-Type: text/html; charset=utf-8');session_start();if (isset($_SESSION['username'])){ unset($_SESSION['username']);}?><!DOCTYPE html><html dir="rtl"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title> تسجيل خروج </title> <link href="style.css" rel="stylesheet" type="text/css" /> </head> <body> <div class="mainLayout"> <div class="content"> <h3> لقد تم تسجيل الخروج سيتم النتقال الى صفحة تسجيل الدخول تلقائيا ً </h3> <script type="text/javascript"> setTimeout(function () { window.location.href = "login.php"; }, 2000); </script> </div> <div class="footer"> <span > حقوق كذا وكذا محفوظة لشركة كذا وكذا :) </span><br /> </div> </div> </body></html> استخدمنا الدالة unset لحذف متغير الجلسة . وستبقى صفحة تسجيل المستخدم باستثناء اننا قمنا في بداية الصفحة من التأكد من أن المستخدم لم يسجل دخوله :     <?phpheader('Content-Type: text/html; charset=utf-8');session_start();if (isset($_SESSION['username']) AND $_SESSION['username'] != '') { header("location:index.php"); exit();}?><!doctype html><html dir="rtl"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title> تسجيل مستخدم جديد </title> <link href="style.css" rel="stylesheet" type="text/css" /> </head> <body> <div class="mainLayout"> <div class="header"> <a href="index.php"> الرئيسية </a> <a href="login.php"> تسجيل الدخول </a> <a href="signup.php"> تسجيل مستخدم جديد </a> </div> <div class="content"> <form action="signup.php?action=submit" method="POST"> <table> <tr> <td><label> اسم المستخدم : </label></td> <td><input type="text" name="username" value="<?php echo isset($_POST['username']) ? $_POST['username'] : ''; ?>"></td> </tr> <tr> <td><label>البريد الإلكتروني : </label> <td><input type="text" name="email" value="<?php echo isset($_POST['email']) ? $_POST['email'] : ''; ?>"><br> </tr> <tr> <td><label>تأكيد البريد الإلكتروني :</label> <td><input type="text" name="email2" value="<?php echo isset($_POST['email2']) ? $_POST['email2'] : ''; ?>"><br> </tr> <tr> <td><label> كلمة المرور : </label> <td><input type="password" name="password"><br> </tr> <tr> <td><label>تأكيد كلمة المرور :</label> <td><input type="password" name="password2"><br> </tr> <tr> <td colspan="2"><input type="submit" name="submit" value=" تسجيل "></td> </tr> </table> </form> <?php // متغير لحفظ البيانات التي يتم جلبها من الملف $data; // متغير لحفظ نصوص الأخطاء $error; if (isset($_GET['action']) and $_GET['action'] == 'submit') { if (username_v() and email_v() and pass_v()) { if (checkUser()) { echo ("<h4 style='color:#FF0;'>هذا المستخدم موجود بالفعل !</h4>"); } else { signUp(); echo ("<h4 style='color:#0F0;'>تم التسجيل بنجاح !</h4>"); } } else { echo "<h4 style='color:#F53;'>$error</h4>"; } } ?> </div> <div class="footer"> <span > حقوق كذا وكذا محفوظة لشركة كذا وكذا :) </span><br /> </div> </div> </body></html><!-- هنا أكواد الدوال --><?php// دالة التحقق من اسم المستخدمfunction username_v() { global $error; if (isset($_POST['username']) and $_POST['username'] != null) { if (preg_match('/^([a-zA-Z0-9._-]){6,30}$/', $_POST['username'])) { return true; } else { $error = "يجب أن يكون اسم المستخدم مكون من الحروف الإنجليزية الكبيرة أو الصغيرة أو الأرقام أو العلامات الخاصة . و _ و - أو خليط منهم فقط ويكون طول اسم المستخدم من 6 إلى 30 عنصر"; return false; } } else { $error = "يرجى ملئ حقل اسم المستخدم"; return false; }}// دالة التحقق من كلمة المرورfunction pass_v() { global $error; if ((isset($_POST['password']) and $_POST['password'] != null) and (isset($_POST['password2']) and $_POST['password2'] != null)) { if (preg_match('/^([a-zA-Z0-9]){6,20}$/', $_POST['password'])) { if ($_POST['password'] != $_POST['password2']) { $error = "كلمة المرور غير متطابقة"; return false; } else { return true; } } else { $error = "يرجى كتابة كلمة مرور تحتوي على حروف إنجليزية كبيرة أو ضغيرة أو أرقام أو خليط منهم فقط وأن يكون طول كلمة المرور من 6 إلى 20 عنصر"; return false; } } else { $error = "يرجى ملئ حقول كلمة المرور"; return false; }}// دالة التحقق من البريد الإلكترونيfunction email_v() { global $error; if ((isset($_POST['email']) and $_POST['email'] != null) and (isset($_POST['email2']) and $_POST['email2'] != null)) { if (preg_match('/^([a-zA-Z])([a-zA-Z0-9._-]){2,30}@([a-zA-Z0-9.-])+\.([a-zA-Z0-9]){2,5}$/', $_POST['email'])) { if ($_POST['email'] != $_POST['email2']) { $error = "البريد الإلكتروني غير متطابق"; return false; } else { return true; } } else { $error = "يرجى كتابة بريد إلكتروني صحيح"; return false; } } else { $error = "يرجى ملئ حقول البريد الإلكتروني"; return false; }}// دالة التحقق من وجود مستخدم مُسجَل مسبقاًfunction checkUser() { global $data; $jsonData = file_get_contents('login.json'); if ($jsonData == false) return false; $data = json_decode($jsonData, true); foreach ($data as $value) { if ($value['username'] === $_POST['username']) return true; } return false;}// دالة تسجيل مستخدم جديدfunction signUp() { global $data; $data[] = array('username' => $_POST['username'], 'password' => $_POST['password'], 'email' => $_POST['email']); $FH = fopen("login.json", 'w') or die("خطأ في فتح الملف للقراءة"); fwrite($FH, json_encode($data)); fclose($FH);}?> لكن ماذا لو قام احد الاشخاص بمحاولة الدخول الى الملف login.json ؟؟ سوف يتم عرض محتوياته في المتصفح بما فيها اسماء المستخدمين وكلمات مرورهم !! ولذلك نستخدم ملف htaccess بسيط يقوم بمنع الوصول الى ملف معين أو احد الملفات (ولمعرفة المزيد من المعلومات عن ملفات htaccess) الملف  .htaccess يحوي الكود التالي :     <Files login.json> order allow,deny deny from all</Files>تمرين : قم بوضع خيار لإبقاء المستخدم مسجلا ً (loged in) لمدة شهر وذلك بوضع check box تحت نموذج تسجيل الدخول (للقيام بالمهمة استخدم الكعكات)       الدرس السابق | الإنتقال للموضوع الأساسي
  2. السلام عليكم سيد بسام اريد مساعدة في برمجة الرسائل الخاصة (الرسائل الواردة ،الرسائل المرسلة ،الرسائل الحذفة)   php5 لكل عضو بإستعمال جدول واحد مع الشكر و التوفيق