اذهب إلى المحتوى

السؤال

نشر

اريد انشاء نموذج لتسجيل الدخول لبعض الأقسام في الموقع ، قمت بتصميم واجهة التسجيل والتي تقوم بتخزين بيانات المستخدم في قاعدة بيانات من نوع MySQL وقمت بتصميم واجهة الدخول التي تقوم بالتأكد من اسم المستخدم وكلمة السر من المستخدم قبل السماح له بالدخول على الموقع  وعرض اسم المستخدم وتاريخ الدخول بأعلى الموقع

كيف يمكن لي الاحتفاظ بعرض اسم المستخدم وتاريخ الدخول عند انتقال المستخدم الى صفحات اخرى  ؟ قمت بتكرار كود التحقيق من بيانات المستخدم من قاعدة البيانات في جميع الصفحات التي تحتاج الى التسجيل للعرض ولكن عند انتقال المستخدم لأى صفحة يقوم الموقع بطلب ادخال اسم المستخدم وكلمة المرور مرة أخرى 

Recommended Posts

  • 0
نشر

يتساءل أغلب المبتدئين في البرمجه عن:
كيف يتم حفظ بيانات المُستخدم ولا يتم المطالبة بها عند الإنتقال إلي صفحه اُخرى في الموقع؟!

- هذا يتم عن طريق زرع جلسة SESSION تخص المستخدم.
- او عن طريق زرع الكعكات COOKIES على متصفح المستخدم.

يُفترض أن تستخدِم هذه الطُرق ( SESSION او COOKIE ) في كود التحقق الذي تقوم بوضعهُ في كل صفحه بدلاً من الاتصال بقاعدة البيانات في كل مرة.

بعد التحقق من صحة بيانات المستخدم قم بتخزين البيانات التي تريدها حاضره دائماً في جلسة تخص فقط هذا المستخدم.

سنفترض أننا جلبنا اسم المُستخدم وتاريخ التسجيل كما ذكرت في سؤالك ووضعناهم بمتغير من نوع مصفوفه Array.
هكذا:

<?php
$info = array("name" => 'hsoub', "date" => '10/07/2015');
?>

بعد ذلك قم بتخزين هذه البيانات في جلسه لكي نستخدمها في التحقق من وجود مستخدم مُتصل بالفعل بدلاً من التحقق عن طريق الاتصال بقاعدة البيانات كل مرة.
هكذا:

<?php
session_start();
$info = array("name" => 'hsoub', "date" => '10/07/2015');
$_SESSION['user'] = $info;
?>

هنا قُمنا بفتح جلسة جديدة لكي نُخبر الخادم اننا سنقوم بانشاء جلسه جديدة او سنقوم بالتحقق من وجود جلسه باسم user ام لا عن طريق دالة.

session_start();

لاحظ أننا وضعنا هذه الداله قبل كل شيء وهذه هي الطريقه الصحيحه لابد ان تكون هذه الداله بمقدمة اي صفحه يتم بها انشاء جلسة SESSION او إذا كنا سنتحقق من جلسة تم إنشاؤها من قبل.
ثم قمنا بانشاء جلسة باسم user عن طريق المتغير $_SESSION وهو عبارة عن مصفوفة Array ثابتة ومحجوزه في لغة PHP.
وبهذا نكون قد حفظنا بيانات المُستخدم ولسنا في حاجه للتحقق مرة اُخرى عن طريق الإتصال بقاعدة البيانات.
بل نقوم بالتحقق من وجود جلسه باسم user ام لا.
هكذا:

<?php
session_start();
if(isset($_SESSION['user']) && !empty($_SESSION['user'])){
    $username = $_SESSION['user']['name'];
    $dateregs = $_SESSION['user']['date'];
}else{
    header('location: /login.php');
}
?>

في هذا المثال قمنا بالتحقق من وجود جلسة باسم user والتحقق من أن الجلسة بها بيانات بالفِعل وليست فارغة.
ثم انشأنا مُتغيران $username وأسندنا لهُ اسم المستخدم المُخزن بالجلسة و $dateregs وأسندنا إليه تاريخ تسجيلهُ بالموقع.
اما إذا كانت الجلسة فارغة او لم يتم إنشاؤها من الأساس سيتم تحويل الزائر إلي صفحة تسجيل الدخول login.php عن طريق دالة header. هذا مُجرد مثال.

أعتقد أنك تتساءل الآن كيف يتم تدمير او إنهاء عمل هذه الجلسة؟!
هذا النوع من الجلسات يتم تدميرها تلقائياً في حالة عدم تفاعل المُستخدم على الموقع لمدة إفتراضيه وهي 20 دقيقة تقريباً.
اما إذا كنت تُريد تدميرها او إنهاء عملها.
على سبيل المثال إذا قام المُستخدم بعمل تسجيل خروج.
ستستخدم دالة unset.
هكذا:

<?php
session_start();
if(isset($_SESSION['user']) && !empty($_SESSION['user'])){
    unset($_SESSION['user']);
    header('location: /');
}
?>

وهناك طريقة اُخرى لتدمير جميع الجلسات التي تم إنشاؤها لهذا المستخدم عن طريق دالة session_destroy
هكذا:

<?php
session_start();
if(isset($_SESSION['user']) && !empty($_SESSION['user'])){
    unset($_SESSION['user']);
    session_destroy();
    header('location: /');
}
?>

هذا ما يتعلق بطريقة الـ SESSION باختصار.

======================================

اما عن الكعكات COOKIES فهي طريقه سهلة جداً وليست بها اي تعقيدات مقارنةً بطريقة الـ SESSION
لإنشاء كعكة او لزرع واحده على متصفح المستخدم نستخدم دالة setcookie
هكذا:

<?php
$info = array("user" => 'hsoub', "date" => '10/07/2015');
setcookie('name',$info['user']);
setcookie('date',$info['date']);
?>

بهذه الطريقه نكون قد انشأنا كعكتين الاولى باسم 'name' وقيمتها اسم المستخدم 'hsoub' والثانيه باسم 'date' وقيمتها تاريخ تسجيل العضو '10/07/2015'.

إذاً كيف أقوم بالتحقق من وجود كعكات بهذه الأسماء وكيف اقوم باستخدامِها؟.
هكذا:

<?php
if(isset($_COOKIE['name']) && isset($_COOKIE['date'])){
    echo 'Username is : '.$_COOKIE['name'].'<br />';
    echo 'Join Date : '.$_COOKIE['date'];
}
?>

تم في هذا المثال التحقق من وجود الكعكات باستخدام المتغير $_COOKIE وهو عبارة عن مصفوفة Array مثل متغير $_SESSION تماماً.

الآن سنقوم بعمل مثال لتدمير او حذف هذه الكعكات كما تم من قبل مع طريقة الـ SESSION.

<?php
if(isset($_COOKIE['name']) && isset($_COOKIE['date'])){
    setcookie('name','',time()-1000);
    setcookie('date','',time()-1000);
    header('location: /');
}
?>

نُلاحظ في هذا المثال اننا استخدمنا طريقة انشاء الكعكات لحذفها ايضاً. كيف يُمكن هذا؟!
هذه حقيقه ولكن هناك فرق إذا كنت قد لاحظتة.
الفرق الاول هو ان قيمة الكعكة هي فارغة ' '.
والفرق الثاني هو ( العامل الجديد parameter ) وقيمته هي مدة مضت وما يُسبت هذا اننا استخدمنا دالة time وهذه تقوم بطباعة الوقت المكون من 10 ارقام ثم تم طرح 1000 من اجمالي العدد والرقم 1000 يعني ثانيه واحده.
ماذا يعني هذا الكلام؟!!
هذا يعني اننا قُمنا بتغيير قيمة الكعكات name و date إلى قيمه فارغة ثم قُمنا بوضع مدة صلاحية لهذه الكعكات بتاريخ مضى منذ ثانية.
وبهذه الطريقه يتم تدمير الكعكه في الحال.

هذا المثال سيتم إستخدامهُ عندما يقوم المستخدم بتسجيل الخروج كما في مثال الـ Session.

من هذا المثال تحديداً اُريدك ان تستنتج شئً مهم وهو عند إنشاء الكعكات تستطيع وضع مدة زمنيه من البداية ويتم بعدها تدمير الكعكات تلقائياً اي عند إنتهاء المدة المحددة حتى إذا لم يقوم المستخدم بتسجيل الخروج من الموقع.
هذا فقط نوع من الآمان للمستخدم.

وبهذهِ الطُرق تستطيع الاحتفاظ باسم المستخدم او اي بيانات اُخرى تُريدها.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...