القائمة الرئيسية

الصفحات

التعامل مع الكوكيز و الجلسات و البريد الإلكتروني في php

الكوكيز Cookies



يستخدم الكوكيز عادة لتحديد هوية المستخدم .




ماهو الكوكيز ؟


يستخدم الكوكيز عادة لتحديد هوية المستخدم . ان الكوكي cookie عبارة عن ملف صغير يتم ارساله من خلال السيرفر الى حاسوب المستخدم . و في كل مرة يتم طلب الصفحة من خلال المتصفح سيتم ارسال ملف الكوكي ايضاً . يمكنك إنشاء و استرجاع ملفات و قيم الكوكي .




كيف يمكن إنشاء cookie ؟


يستخدم الكود الوظيفي setcookie() لإنشاء كوكي .

ملاحظة : يجب وضع كود setcookie() قبل وسم <html> .

التركيبة


setcookie(name, value, expire, path, domain);
	  

مثال 1

في المثال التالي سيتم إنشاء cookie اسمه user والقيمة هي Ahmad . كما سيتم تحديد انتهاء cookie بعد ساعة :
<?php
	  setcookie("user", "Ahmad", time()+3600);

	  ?>

	  <html>

	  .....



ملاحظة : يتم ترميز قيمة cookie تلقائياً عند ارسال cookie كما يتم ترميزه تلقائياً عند استرجاعه ولتجنب ترميز الروابط URL يمكنك استخدام setrawcookie() عوضاً عنها .

مثال 2

يمكنك تحديد وقت انتهاء cookie بطريقة أخرى أيضاً . كما يمكن أن تكون أسهل عند استخدام الثواني :
<?php
	  $expire=time()+60*60*24*30;
	  setcookie("user", "Ahmad", $expire);

	  ?>

	  <html>

	  .....



في المثال السابق تم تحديد انتهاء وقت الملف لشهر ( 60 ثا , 60 د , 24 سا , 30 يوم ) .




كيفية استرجاع قيمة Cookie ؟


يمكن استخدام المتغير $_COOKIE لاسترجاع قيمة cookie .

في المثال التالي تم استرجاع قيمة cookie المسماة user وعرضها في الصفحة :
<?php
	  // اظهار الكوكي

	  echo $_COOKIE["user"];

	  // طريقة أخرى لعرض جميع الوكيز

	  print_r($_COOKIE);

	  ?>



تم استخدام isset() في المثال التالي لمعرفة فيما اذا تم ضبط cookie أم لا :
<html>
	  <body>
	  <?php
	  if (isset($_COOKIE["user"]))
	  echo "Welcome " . $_COOKIE["user"] . "!<br />";
	  else
	  echo "Welcome guest!<br />";
	  ?>

	  </body>
	  </html>






كيف تحذف Cookie ؟


عند حذف cookie ينبغي التأكد بأن تاريخ الانتهاء هو في الماضي .

مثال عن حذف كوكي cookie
<?php
	  // set the expiration date to one hour ago
	  setcookie("user", "", time()-3600);

	  ?>






ماذا لو كان المتصفح لا يدعم cookie ؟


اذا كنت تتعامل مع متصفحات لا تدعم cookie عندها يمكنك استخدام طرق أخرى لتمرير المعلومات من صفحة الى أخرى . إحدى هذه الطرق هي تمرير المعلومات من خلال النماذج forms ( تم شرح النماذج و المدخلات في دروس ماضية ) .

يمرر النموذج مدخلات المستخدم إلى الصفحة "welcome.php" عند ضغط المستخدم على زر الارسال :
<html>
	  <body>
	  <form action="welcome.php" method="post">
	  Name: <input type="text" name="name" />
	  Age: <input type="text" name="age" />
	  <input type="submit" />
	  </form>

	  </body>
	  </html>



استرجاع القيم من المجلد welcome.php مثل :
<html>
	  <body>
	  Welcome <?php echo $_POST["name"]; ?>.<br />
	  You are <?php echo $_POST["age"]; ?> years old.

	  </body>
	  </html>






الجلسات Sessions



تستخدم متغيرات الجلسات session لحفظ المعلومات حول أو تغيير الضبط للمستخدم . تحمل متغيرات session معلومات حول مستخدم واحد كما أنها تكون متوفرة في جميع الصفحات وبتطبي واحد .



متغيرات Session


عندما تعمل على برنامج فإنك تفتحه ثم تقوم بالتعديل عليه ثم تقوم بإغلاقه . ذلك تماماً مانسميه جلسة أو session . يعلم الحاسوب من انت ويعلم متى تبدأ العمل على البرنامج ويعلم متى تنتهي من البرنامج و لكن على شبكة الانترنت هناك مشكلة صغيرة وهي أن السيرفر لايعلم من انت و لايعلم ماتفعل لأن عنوان HTTP لايحافظ على نفس الحالة .

ان PHP session تحل هذه المشكلة وذلك بالسماح لك بتخرين معلومات على السيرفر لآخر استخدام قمت به ( مثل اسم مستخدم أو عناصر التسوق ) . على أي حال تعتبر معلومات session دائمة التخزين أي يمكنك تخزين المعلومات في قاعدة البيانات .

تعمل session بإنشاء id مميز UID و ذلك لكل زائر وتخزن المتغيرات المتمركزة في هذا UID . يتم تخزين UID في cookie أو متوالد على الرابط التشعبي URL .




بدء جلسة PHP Session


قبل إمكانية تخزين معلومات المستخدم على في جلسة PHP session عندها يجب البدء أولاً بالجلسة session .

ملاحظة : يجب أن تظهر session_start() قبل وسم <html> :
<?php session_start(); ?>
	  <html>
	  <body>
	  ...........
	  </body>
	  </html>



سيتم تسجيل المتستخدم من خلال الكود السابق مع السيرفر كما سمح لك ببدء حفظ معلومات المستخدم وتثبيت الاي دي الفريد UID لتلك جلسة المستخدم .




تخزين متغيرات الجلسات Session


أفضل طريقة لتخزين المعلومات واستردادها هو المتغير المعرّف مسبقاً من PHP وهو $_SESSION :
<?php
	  session_start();
	  // store session data
	  $_SESSION['views']=1;
	  ?>
	  <html>
	  <body>

	  <?php
	  //retrieve session data
	  echo "Pageviews=". $_SESSION['views'];

	  ?>

	  </body>
	  </html>


ستظهر النتيجة على المتصفح


Pageviews=1
	  

في المثال التالي قمنا بإنشاء عدّاد بسيط لإحصاء عدد مشاهدة الصفحة . يقوم isset() بفحص فيما اذا كانت المشاهدات تم مشاهدتها بالفعل واذا تمت المشاهدة من قبل سيتم زيادة رقم عدد الزيارات . اذا لم يوجد سيتم إنشاء متغير و سيتم ضبطه الى 1 :
<?php
	  session_start();
	  if(isset($_SESSION['views']))
	  $_SESSION['views']=$_SESSION['views']+1;
	  else
	  $_SESSION['views']=1;
	  echo "Views=". $_SESSION['views'];
	  ?>
	  




حذف session


غن أردت حذف بعض البيانات في الجلسة session يمكنك استخدام unset() أو استخدام session_destroy() .

تستخدم unset() لتحرير جزء معين من متغير الجلسة :
<?php
	  unset($_SESSION['views']);

	  ?>



كما يمكنك أيضاً حذف الجلسة session بشكل كامل من خلال استدعاء session_destroy() :
<?php
	  session_destroy();

	  ?>



سيتم حذف جميع البيانات عند استخدام session_destroy() كما سيتم حذف جميع معلومات المستخدمين المخزنة فيها .




إرسال البريد الالكتروني



تسمح PHP بإرسال بريد الكتروني مباشرة من خلال كود معين .



function PHP mail()


تستخدم الوظيفة mail() لارسال البريد الالكتروني من داخل السكربت .

التركيبة


mail(to,subject,message,headers,parameters)
	


القيمالشرح
toمطلوب . تحدد المستقبل و المستقبلون للبريد
subjectمطلوب . تحدد موضوع الرسالة . ملاحظة : لايمكن أن تحتوي القيمة على أحرف خاصة
messageمطلوب . تحدد الرسالة التي سيتم ارسالها . ولكل سطر يجب أن يكون مفصول بسطر جديد (n) . يجب أن يحتوي السطر على أكثر من 70 كلمة .
headersخياري . تخصيص ترويسات اضافية مثل cc أو Bcc يجب على الترويسات أن تكون مفصولة (rn) .
parametersخياري . تحديد قيمة إضافية لبرنامج sendmail




إنشاء بريد الكتروني بسيط


أبسط طريقة لإنشاء و ارسال بريد باستخدام PHP هو ارسال بريد نصي .

في المثال التالي سيتم أولاً إنشاء متغيرات وهي ($to, $subject, $message, $from, $headers) ثم نستخدم المتغيرات في mail() function لارسال بريد الكتروني :
<?php
	  $to = "someone@example.com";
	  $subject = "Test mail";
	  $message = "Hello! This is a simple email message.";
	  $from = "someonelse@example.com";
	  $headers = "From:" . $from;
	  mail($to,$subject,$message,$headers);
	  echo "Mail Sent.";

	  ?>


نموذج البريد


باستخدام PHP يمكنك انشاء نموذج لارسال بريد الكتروني في موقعك . سنقوم بارسال رسالة نصية في المثال التالي لبريد الكتروني محدد :
<html>
	  <body>
	  <?php
	  if (isset($_REQUEST['email']))
	  //if "email" is filled out, send email
	  {
	  //send email
	  $email = $_REQUEST['email'] ;
	  $subject = $_REQUEST['subject'] ;
	  $message = $_REQUEST['message'] ;
	  mail("someone@example.com", "$subject",
	  $message, "From:" . $email);
	  echo "Thank you for using our mail form";
	  }
	  else
	  //if "email" is not filled out, display the form
	  {
	  echo "<form method='post' action='mailform.php'>
	  Email: <input name='email' type='text' /><br />
	  Subject: <input name='subject' type='text' /><br />
	  Message:<br />
	  <textarea name='message' rows='15' cols='40'>
	  </textarea><br />
	  <input type='submit' />
	  </form>";
	  }

	  ?>

	  </body>
	  </html>


كيف يعمل كود المثال السابق 


  • أولاً , فحص فما اذا تم تعبئة حقول مدخلات البريد .

  • اذا لم يتم ذلك مثل اذا كانت اول زيارة للصفحة عندها سيتم إظهار نموذج HTML .

  • و ان تم تعبئة النموذج سيتم ارسال البريد من النموذج .

  • عند الضغط على زر ارسال بعد تعبئة النموذج سيتم اعادة تحميل الصفحة وسيتم فحص فيما اذا تم ذبط مدخلات النموذج ثم سيتم ارسال البريد .

ملاحظة : هذه اسهل طريقة لارسال بريد الكتروني و لكنه غير آمن وفي الدرس القادم سيتم شرح كيفية انشاء بريد الكتروني محمي مع الكثير من السكربتات .



مراجع البريد في PHP


لمزيد من المعلومات حول كيفية إنشاء بريد بسيط او محمي او mail() يمكنك زيارة مراجع بريد PHP




البريد الالكتروني المحمي



هناك نقطة ضعف في انشاء البريد الالكتروني لكن سيتم حل هذه المشكلة في هذا الدرس .



إنشاء البريد الالكتروني المحمي


أولاً لاحظ الكود من خلال الدرس السابق :
<html>
	  <body><?php
	  if (isset($_REQUEST['email']))
	  //if "email" is filled out, send email
	  {
	  //send email
	  $email = $_REQUEST['email'] ;
	  $subject = $_REQUEST['subject'] ;
	  $message = $_REQUEST['message'] ;
	  mail("someone@example.com", "Subject: $subject",
	  $message, "From: $email" );
	  echo "Thank you for using our mail form";
	  }
	  else
	  //if "email" is not filled out, display the form
	  {
	  echo "<form method='post' action='mailform.php'>
	  Email: <input name='email' type='text' /><br />
	  Subject: <input name='subject' type='text' /><br />
	  Message:<br />
	  <textarea name='message' rows='15' cols='40'>
	  </textarea><br />
	  <input type='submit' />
	  </form>";
	  }
	  ?>

	  </body>
	  </html>




المشكلة في الكود السابق هو أن أي مستخدم غير مرخص له يمكنه ادخال البيانات الى البريد من خلال نماذج الادخال .

ماذا يحصل لو أن المستخدم أدخل النصوص التالية الى حقول مدخلات النماذج ؟
someone@example.com%0ACc:person2@example.com
	  %0ABcc:person3@example.com,person3@example.com,
	  anotherperson4@example.com,person5@example.com
	  %0ABTo:person6@example.com
	  

يضع الكود mail() النص السابق الى مدخلات النموذج بأنه نص طبيعي و ترويسة النموذج لديها حقول Cc و Bcc و To . عند الضغط على زر الارسال عندها سيتم ارسال البريد الى جميع العناوين التي تم وضعها في النص السابق .




إيقاف ادخال البريد الالكتروني


أفضل طريقة لايقاف ادخال البريد الالكتروني هي تفعيل المدخلات .

يعتبر الكود نفسه في الدرس السابق ولكن قمنا بإضافة مفعّل للمدخلات و التي بدورها تفحص مدخلات حقول البريد :
<html>
	  <body><?php
	  function spamcheck($field)
	  {
	  //filter_var() sanitizes the e-mail
	  //address using FILTER_SANITIZE_EMAIL
	  $field=filter_var($field, FILTER_SANITIZE_EMAIL);

	  //filter_var() validates the e-mail
	  //address using FILTER_VALIDATE_EMAIL

	  if(filter_var($field, FILTER_VALIDATE_EMAIL))
	  {
	  return TRUE;
	  } else {
	  return FALSE;
	  }
	  }

	  if (isset($_REQUEST['email']))
	  {//if "email" is filled out, proceed
	  //check if the email address is invalid
	  $mailcheck = spamcheck($_REQUEST['email']);
	  if ($mailcheck==FALSE)
	  {
	  echo "Invalid input";
	  }
	  else
	  {//send email
	  $email = $_REQUEST['email'] ;
	  $subject = $_REQUEST['subject'] ;
	  $message = $_REQUEST['message'] ;
	  mail("someone@example.com", "Subject: $subject",
	  $message, "From: $email" );
	  echo "Thank you for using our mail form";
	  }
	  }
	  else
	  {//if "email" is not filled out, display the form
	  echo "<form method='post' action='mailform.php'>
	  Email: <input name='email' type='text' /><br />
	  Subject: <input name='subject' type='text' /><br />
	  Message:<br />
	  <textarea name='message' rows='15' cols='40'>
	  </textarea><br />
	  <input type='submit' />
	  </form>";
	  }
	  ?>

	  </body>
	  </html>



في المثال السابق قمنا باستخدام فلتر PHP لتفعيل الحقول

  • يمسح الفلتر FILTER_SANITIZE_EMAIL جميع أحرف البريد الغير شرعية من النصوص .

  • يغعّل الفلتر FILTER_VALIDATE_EMAIL القيمة مثل عنوان بريد الكتروني .

يمكنك قراءة المزيد عن الفلاتر من خلال درس .