رد جديد  مشاركة جديدة 
السيشن في Php
الكاتب الرسالة
Pepo
عضو مميز



المشاركات : 5,096
مجموعة : الاعضاء
الإنتساب : 30-12-2006
الحالة : غير متصل
السمعة : 37
الرد : #1
السيشن في Php

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

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

لماذا السيشن؟
السيشن Sessions هي من اهم المزايا التي تتمتع بها اي لغة برمجة، ونحتاجها دائماً عندما تظهر الحاجة لنقل بيانات بين صفحات السكريبت، ففي أي سكريبت عادي يتم فقدا، المتغيرات الخاصة بالصفحة عند الانتقال الى صفحة أخرى، وهذه تمثل مشكلة في بعض السكريبتات مثل "سلة التسوق" والتي تحتوي معلومات عن بضائع وخدمات قام المستخدم بشرائها، والتي يجب ان تحفظ خلال جولته في الموقع، من هنا تظهر الحاجة لاستخدام السيشن sessions.

طريقة عمل السيشن
لتلبية المتطلبات المشروحة في السطور السابقة، تقوم السيشن بتخزين بيانات عن الزائر (مثل: اسم المستخدم ومحتويات سلة التسوق) على السيرفر نفسه في مكان آمن بعيداً عن المتطفلين، ولكن هذه البيانات تعتبر مؤقتة فسرعان ما يتم حذفها بمجرد ترك الزائر للموقع، فاذا كنت تحتاج للاحتفاظ بها لمدة أطول يجب أن تقوم بنقلها الى قاعدة البيانات MySQL للاحتفاظ بها لفترات أطول.
وتعمل السيشن عن طريق انشاء رقم تعريفي UID مميز لكل زائر للموقع بهذه الطريقة لا يمكن ان تختلط بيانات اثنين من الزوار أبداً.

بدء السيشن
الخطوة الأولى للتعامل مع السيشن هي بدءها، وعند بداية السيشن يجب أن تحرص على ان يكون كود البداية في أول الملف قبل أي كود HTML آخر، بمعنى آخر قبل طباعة أي شيء الى المتصفح.
ويكون بدء السيشن باضافة الكود التالي الى بداية ملفك تماماً:
مثال1:

كود PHP :
<?php
session_start
();
?>

يقوم هذا الكود البسيط بتسجيل رقم UID للسيشن في السيرفر استعدادا للاحتفاظ بالمتغيرات فيها.

اضافة متغير الى السيشن
لاضافة اي متغير الى السيشن استخدم المصفوفة SESSION_$ والتي ستحتاجها عند الاضافة والقراءة لمتغيرات السيشن، جدير بالذكر انه في الاصدارات القديمة من PHP كانت هناك طريقة أخرى لكن تم تحديثها الى هذه الطريقة حالياً:
مثال2:

كود PHP :
<?php
session_start
(); 
$_SESSION['views'] = 1
echo 
"مرات المشاهدة = "$_SESSION['views'];
?>

في هذا المثال قمنا باضافة متغير الى السيشن (في السطر رقم 1) ومن ثم قرائته (في السطر رقم 2).

استخدام الدالة isset
عندما ترغب في قراءة قيمة متغير من السيشن فمن المهم ان تختبر اذا كان موجوداً أولاً، ويكون ذلك باستخدام الدالة isset مع تمرير اسم المتغير لها، لاحظ المثال التالي:

مثال3:
بفرض أننا أردنا انشاء عداد لعدد مرات مشاهدة صفحات السكريبت لكل مستخدم، فيمكننا ذلك عن طريق انشاء كود يقوم بالتأكد من وجود قيمة في العداد عن طريق الدالة isset فاذا كان له قيمة يضيف عليه 1 مشاهدة، واذا لم يكن له قيمة فيعطيه القيمة 1 وهي أول مشاهدة.
لاحظ الكود التالي:

كود PHP :
<?php
session_start
(); 
if(isset(
$_SESSION['views']))
{
$_SESSION['views'] = $_SESSION['views']+ 1;
}
else
{
$_SESSION['views'] = 1;
}
echo 
"عدد المشاهدات = "$_SESSION['views']; 
?>

في الكود السابق هناك احتمالين:
1- الا يكون هناك قيمة للمتغير views في المصفوفة SESSION_$، وهذا معناه ان هذه اول زيارة للزائر، وهنا سيتم تنفيذ الكود في السطر رقم 9 وهو باعطاء القيمة 1 للعداد views.
2- ان يكون هناك قيمة للمتغير المذكور، يعني هذه ليست أول زيارة وفي هذه الحالة سيتم تنفيذ الكود في السطر رقم 5 وهو بزيادة المتغير views بمقدار 1 زيارة.

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

كود PHP :
<?php
session_start
(); 
if(isset(
$_SESSION['cart']))
{
unset(
$_SESSION['cart']); 
}
?>

ويقوم الكود السابق بافراغ المتغير cart في حالة انه يحمل اي قيمة.

كما يمكنك ايضاً انهاء السيشن (تدميرها) بكل ما تحتويه من متغيرات كالتالي:

كود PHP :
<?php
session_start
(); 
session_destroy();
?>

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

اخر مواضيعى

مع التحية Pepo
لولا ان لهذا المنتدى اخوة واخوات مثلكم.. ما كان له وجود حتى الأن
احبكم فى الله

تم تعديل المشاركة في : 2007-11-24 02:03 PM بواسطة Pepo.

2007-03-21 06:35 PM
زيارة موقع العضو إعرض جميع مشاركات العضو إقتبس الرسالة فى رد
mohammed_sayed
عضو مبتدئ
**



المشاركات : 1
مجموعة : الأعضاء
الإنتساب : 09-06-2007
الحالة : غير متصل
السمعة : 0
الرد : #2
RE: السيشن في Php

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

عندي مشكلة مع تلك الدالة عند استخدامها حتى مع كتابتها في اول السطر
Warning: session_start(): open(/tmp\sess_77e058984d2a833aabbb1f3c32a916c6, O_RDWR) failed: No such file or directory (2) in D:\A1works\server\work\create.php on line 1

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at D:\A1works\server\work\create.php:1) in D:\A1works\server\work\create.php on line 1

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at D:\A1works\server\work\create.php:1) in D:\A1works\server\work\create.php on line 1

Warning: Unknown(): open(/tmp\sess_77e058984d2a833aabbb1f3c32a916c6, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0
في ما يبدو انها لم تجد ملف الtemp فما الحل لكي تتعرف عليه

مع التحية mohammed_sayed
غير مسموح بعرض الروابط الا بعد التسجيل و تفعيل العضوية
2007-06-09 02:41 AM
إعرض جميع مشاركات العضو إقتبس الرسالة فى رد
Pepo
عضو مميز



المشاركات : 5,096
مجموعة : الاعضاء
الإنتساب : 30-12-2006
الحالة : غير متصل
السمعة : 37
الرد : #3
RE: السيشن في Php

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

السلام عليكم ورحمة الله وبركاته
اخى الكريم.. هل يمكننا رؤية على الأقل جزء من الكود الذى يظهر لك ذلك الخطأ لنعمل على حل الخطأ سويا؟


2007-06-09 04:55 PM
زيارة موقع العضو إعرض جميع مشاركات العضو إقتبس الرسالة فى رد
المتفائل2012
عضو مشارك
***



المشاركات : 67
مجموعة : الأعضاء
الإنتساب : 19-10-2007
الحالة : غير متصل
السمعة : 0
الرد : #4
Re: السيشن في Php

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

شرح مبسط ورائع بوركت


اخر مواضيعى
2007-10-26 12:19 PM
إعرض جميع مشاركات العضو إقتبس الرسالة فى رد

رد جديد  مشاركة جديدة 
السيشن في Php

إشترك بالمشاركة | إضافة المشاركة للمفضلة
الذهاب إلى :