سؤال php جلسة

مرحبا جالس اتعلم php

وصادفت شخص يسوي هذا في بداية العمل . وش الفايدة من هذا وهل راح يخرب شي يعني لو اردت اجعل شخص يسجل دخول لشهر بالكوكيز هل هذا يمنع ؟ وعندي سؤال ثاني الوظيفة موضوعه اخر شي وتم استدعائه فوق هل هذا شي خاص بالphp ولا كيف طريقته كيف يعرفه ان فيه داله تحت

<?php

ini_set('session.use_only_cookies',1);
ini_set('session.use_strict_mode',1);


session_set_cookie_params([


    'lifetime'=> 1800,
    'domain'=>'localhost',
    'path'=>'/','secure'=>true,'httponly'=>true




]);


session_start();
if (!set($_SESSION['last_regeneration']>=$interval)) {
    reg_session_id();


}else{
    $interval=60*30;
    if (time()-$_SESSION['last_regeneration']>=$interval) {
        reg_session_id();
       
    }
}


function regenerate_session_id(){
    session_regenerate_id();
    $_SESSION['last_regenertion']=time();
    
}
يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

اجابة سؤالك ما الفائده من هذه الكود :

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

اجابة سؤالك هل هذا يمنع اجعل شخص يسجل دخول لشهر بالكوكيز

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

اجابة سؤالك الخاص باستدعاء الدالةقبل تعريفها

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

بنسبه اذا كنت تريد فهم جميع الكود اللذي ارفقته بلكامل

  1. ini_set('session.use_only_cookies', 1): تضمن هذه الدالة أن يتم تخزين معرف الجلسة (session ID) فقط في ملفات تعريف الارتباط (cookies) على جهاز المستخدم.
  2. ini_set('session.use_strict_mode', 1): تمنع هذه الدالة استخدام معرفات الجلسة (session IDs) غير صالحة أو مزيفة.
  3. ()session_set_cookie_params:
  • lifetime: تحدد مدة صلاحية الكوكيز (cookies) الخاصة بالجلسات (شهر في هذه الحالة).
  • domain: نطاق الكوكيز (cookies).
  • path: المسار الذي يمكن الوصول من خلاله إلى الكوكيز (cookies).
  • secure: يمنع إرسال الكوكيز (cookies) عبر اتصالات HTTP غير آمنة.
  • httponly: يمنع الوصول إلى الكوكيز (cookies) من خلال JavaScript.
  • ()session_start: تبدأ جلسة جديدة أو تستأنف جلسة موجودة.
  • ()reg_session_id: وظيفة مخصصة لإعادة إنشاء معرف الجلسة (session ID) بشكل دوري.

الكود لديك هو لتعزيز أمان جلسات PHP وضمان نقلها عبر HTTPS فقط، ومنع تخزينها في ذاكرة المتصفح.

فالسطر ini_set('session.use_only_cookies', 1) يُفعل استخدام الكوكيز فقط لنقل بيانات الجلسة، دون استخدام GET أو POST.

والدالة ini_set('session.use_strict_mode', 1) تُفعّل وضع الصرامة، مما يمنع إعادة استخدام معرف الجلسة القديمة بعد إعادة إنشائها.

بينما session_set_cookie_params([:تُحدد خصائص الكوكيز، بما في ذلك:

  • lifetime: مدة صلاحية الكوكيز (ثوانٍ)
  • domain: نطاق اسم المضيف الذي يمكن للكوكيز العمل عليه
  • path: مسار الملفات التي يمكن للكوكيز العمل عليها
  • secure: نقل الكوكيز عبر HTTPS فقط
  • httponly: منع الوصول إلى الكوكيز من JavaScript

ووظيفة regenerate_session_id هي لتغيير معرف الجلسة الحالي، مما يُعزز الأمان ويمنع سرقة البيانات.

ويحدث استدعاء الوظيفة داخل شرط if للتحقق من وقت آخر إعادة إنشاء معرف الجلسة، وإن كان الوقت أكبر من أو يساوي الفاصل الزمني المحدد (30 دقيقة في هذا المثال)، يتم إعادة إنشاء معرف الجلسة وتحديث آخر إعادة إنشاء.

وتُستخدم الكلمة المفتاحية function لإنشاء دالة جديدة في PHP، ونستطيع استدعاء تلك الدالة من أي مكان داخل الملف.

ولا يمنع الكود تسجيل الدخول لمدة شهر، بل يُستخدم لتحديد خصائص الكوكيز، بما في ذلك مدة صلاحية الكوكيز (1800 ثانية لديك)، وتستطيع يمكن تغيير تلك القيمة حسب الحاجة، وعليك تغيير قيم domain و path حسب بيئة العمل الخاصة بك.

لنبدأ بالإجابة على أسئلتك واحدًا تلو الآخر:

ما الفائدة من إعدادات الجلسة (Session Settings) في PHP؟

1. session.use_only_cookies=1: هذا الإعداد يضمن استخدام الكوكيز فقط لنقل معرفات الجلسات بين العميل والخادم. يمنع هذا الخيار استخدام الطرق الأخرى مثل تمرير معرف الجلسة في URL، مما يعزز من أمان التطبيق.

2. session.use_strict_mode=1: هذا الإعداد يضمن أن PHP لن يستخدم معرف جلسة غير موجود كمعرف جلسة صالح. بمعنى آخر، يجب أن يتم إنشاء معرف الجلسة من قبل الخادم ولا يُقبل معرف الجلسة الذي يُرسل من العميل إلا إذا كان موجودًا بالفعل. هذا يساعد في منع بعض أشكال هجمات الجلسة.

هل هذه الإعدادات تمنع استخدام الكوكيز لتتبع جلسة المستخدم لمدة شهر؟

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

بخصوص تعريف الدوال في PHP واستدعائها قبل تعريفها:

أما عن استدعاء الوظيفة فوق، فالPHP يقوم بتحليل الشفرة من أعلى لأسفل، فيرى الوظيفة ويعرف أنه بعد استدعائها سيتم تنفيذها.

ولكن يوجد بعض الملاحظات والتصحيحات على الكود، الدالة معرفة باسم regenerate_session_id لكنك تستدعي reg_session_id. يجب أن يتطابق اسم الدالة عند التعريف والاستدعاء.

سأحاول توضيح السؤال الثاني بشكل أكبر كالتالي

تسمح لغة PHP باستخدام الدالة قبل تعريفها. بمعنى آخر، يمكنك كتابة اسم الدالة واستدعاءها قبل كتابة تعريفها الفعلي في الكود. كيف يحدث ذلك ؟

عندما تقوم PHP بترجمة الكود، فإنها ترفع جميع تعريفات الدوال إلى أعلى ملف PHP. هذا يعني أنه يمكن استخدام أي دالة في أي مكان في الملف، حتى لو تم تعريفها لاحقًا.

مثال:

echo myFunction(2, 3); // ستُطبع 5

function myFunction($a, $b) {
  return $a + $b;
}