ما هي أحدث الممارسات الجيدة ، وأسهل طريقة لاستخدام الجلسات في PHP؟

يبدو أن الجلسات في PHP قد تغيرت منذ آخر مرة استخدمتها فيها ، لذلك أبحث عن طريقة بسيطة لاستخدام الجلسات ولكن في نفس الوقت حتى تكون آمنة نسبيًا وممارسة شائعة جيدة.

0
وأضاف
الآراء: 1

7 إجابة

كانت الجلسات جزءًا هامًا من معرفتي في PHP لأنها ساعدتني في حل مشكلة مصادحي في تسجيل الدخول عندما كنت أطور أول تطبيق ويب.

session_start();
if( isset($_POST['username']) && isset($_POST['password']) )
{
    if( auth($_POST['username'], $_POST['password']) )
    {
        //Authentication passed
        $_SESSION['user'] = $_POST['username'];
       //redirect to required page
        header( "Location: index.php" );
    } 
    else 
    {
       //Authentication failed redirect to login
       header( "Location: loginform.html" );
    }
} 
else 
{
      //Username and Password are required
      header( "Location: loginform.html" );
}
0
وأضاف

تغيرت إدارة الجلسة بعض الوقت إلى الوراء (أعتقد أنه كان حوالي 4.4). لا تزال الآلية القديمة تعمل ، ولكن تم إيقافها. انها مربكة إلى حد ما ، لذلك أوصي بالبقاء واضحا. اليوم ، يمكنك استخدام الجلسات عن طريق الوصول إلى المتغير العام $ _SESSION (إنه صفيف). يمكنك أن وضع مثيلات الكائن هناك ، ولكن تحتاج إلى تحميل تعريفات الفئة لهذه الكائنات قبل بدء الجلسة في الصفحة التالية. يمكن أن يساعدك استخدام autoload هنا.

يجب عليك بدء جلسة قبل أن تتمكن من استخدام $ _SESSION. منذ بدء الدورة يرسل رؤوس ، لا يمكن أن يكون لديك أي إخراج من قبل. يمكن حل هذا بإحدى الطريقتين التاليتين: إما أن تبدأ الجلسة دائمًا في بداية النص البرمجي. أو يمكنك تخزين كل المخرجات ، وإرسالها في نهاية النص.

إحدى الأفكار الجيدة هي إعادة إنشاء الجلسة لكل طلب. هذا يجعل الاختطاف أقل احتمالا.

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

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

0
وأضاف
انظر بتمعن. قم بإعادة إنشاء نعم للجلسة ، لكن فقط عندما تحتاج إلى ذلك. وهذا يعني عندما يقوم المستخدم بتسجيل الدخول.
وأضاف المؤلف troelskn, مصدر
لقد ذهبت إلى منتدى نقطة الموقع وألقيت نظرة. مما أستطيع أن أرى أنه في الواقع يبدو أن يوصي تجديد التجديد وكذلك استخدام ملف تعريف الارتباط فقط بشكل عام.
وأضاف المؤلف Laith, مصدر
لا يتفق الجميع في هذا الموضوع مع هذا الموقف
وأضاف المؤلف Laith, مصدر

قم بتغليف مصفوفة SESSION $ في كائن Session() الذي يسمح لك بالحصول على المتغيرات من الجلسة ، والحصول عليها ، ونشرها بطريقة مماثلة (ولكن قابلة للفصل) ، بما في ذلك فلاتر الأمان التلقائية ، ومتغيرات الفلاش (var التي يتم استخدامها مرة واحدة بعد ذلك distroyed) ، وقيم القيمة الافتراضية.

إلقاء نظرة على سلوك Symfony على هذه النقطة ، انها مفيدة للغاية.

0
وأضاف

أولاً ، استخدم ملف تعريف الارتباط فقط ، إلا إذا كان لديك سبب عمل جيد جدًا. كان لدي عميل أصر على جلسات تستند إلى عنوان url للمشروع فقط. غير آمن للغاية وآلام للعمل معها.

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

session_start();
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();

شيء آخر هو ممارسة جيدة هو إذا كنت تفعل نوعا من تسجيل دخول المستخدم كجزء من النظام ، وإبطال وإفراغ بيانات جلسة العمل على الخروج بشكل كامل لضمان أن المستخدم قد تم تسجيل الخروج من النظام بالفعل. لقد رأيت أنظمة يتم إنجاز تسجيل الخروج منها فقط عن طريق إزالة ملف تعريف الارتباط للجلسة.

0
وأضاف

بقدر ما هي البساطة ، فإنها لا تحصل على أفضل من:

# Start the session manager
session_start(); 

# Set a var
$_SESSION['foo'] = 'whatever';

# Access the var
print $_SESSION['foo'];
0
وأضاف
0
وأضاف

على الرغم من أن قاعدة البيانات قد تكون أكثر أمانًا للجلسات ، يجب أن تركز على ما تقوم بتخزينه في الجلسة في المقام الأول - لا ينبغي أن تحتوي على أي شيء سوى معرف لتعريف المستخدم (و MAYBE a firstname أو متغير مؤقت بين الصفحات ).

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

للاستخدام ، أوصي المتغير العالمي القياسي:

$_SESSION['yourvar'] = 'somevalue';

إذا كنت تستخدم هذه الطريقة في جميع التعليمات البرمجية ، فيمكنك بسهولة تغيير النهاية الخلفية لاحقًا من خلال استخدام session_set_save_handler ، والتي تعطي طريقة موحدة لتنفيذ الخلفية الدائرية. لاحظ أنه يمكنك استخدام كائن لاحتواء كل التعامل مع الجلسة ، ببساطة إعطاء المصفوفات لكل إدخال - صفيف ('Staticclass' ، 'staticmethod').

لمزيد من الاستخدام المتعمق ، أنصحك بإلقاء نظرة على كيفية التعامل مع الجلسات في KohanaPHP .

0
وأضاف