تعيين (حذف) ملفات تعريف الارتباط، تعيين ملفات تعريف الارتباط، إرسال ملفات تعريف الارتباط. PHP

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

كيفية تعيين ملفات تعريف الارتباط باستخدام PHP؟

دعونا نلاحظ ذلك على الفور تعيين ملف تعريف الارتباطمن الممكن إما لفترة معينة، على سبيل المثال ساعتين، أو بدون حد زمني، ثم سيتم حذف ملف تعريف الارتباط تلقائيًا بعد إغلاق المتصفح.

في PHP تم تعيين ملف تعريف الارتباطباستخدام الوظيفة تعيين ملف تعريف الارتباط ().

ملفات تعريف الارتباط

يجب أن يكون

مرسل

قبل أي رؤوس أخرى (هذا تقييد لملفات تعريف الارتباط، وليس PHP). يتطلب هذا إجراء استدعاءات لهذه الوظيفة قبل العلامات أو

إعداد ملفات تعريف الارتباط

قبل إغلاق المتصفح، قم بكتابة ما يلي على الصفحة
setcookie("_ws_"،"test"،0،"/");
// "/" - إذا كان البرنامج النصي موجودًا في مجلد مختلف
// سيظل ملف تعريف الارتباط مكتوبًا على هذا النحو www.sdws.ru
?>

كيفية ضبط ملف تعريف الارتباط لفترة معينة، ليوم واحد، لبضع دقائق، لساعات؟

في PHP الخوارزمية بسيطة جداً
// قم بتعيين ملف تعريف الارتباط
setcookie("_ws_"،"test"،time()+3600،"/");
?> الوقت ()+3600- ضبط ملف تعريف الارتباط لمدة ساعة واحدة (3600 ثانية).
على سبيل المثال، نحتاج إرسال ملف تعريف الارتباطعلى 23 يوما
// قم بتعيين ملف تعريف الارتباط
setcookie("_ws_"،test"،time()+1987200،"/");
?>

إزالة ملفات تعريف الارتباط. كيفية حذف ملفات تعريف الارتباط؟

حذف ملفات تعريف الارتباطيحدث باستخدام نفس الوظيفة تعيين ملف تعريف الارتباط (). قمنا بتعيين نفس المعلمات، فقط مع علامة الطرح
setcookie("_ws_"،"test"،time()-3600،"/");
?> موضوع مشابه:

آخر تحديث: 11/1/2015

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

حفظ ملفات تعريف الارتباط

لحفظ ملفات تعريف الارتباط على جهاز الكمبيوتر الخاص بالمستخدم، استخدم الوظيفة تعيين ملف تعريف الارتباط (). لديها التعريف التالي:

Bool setcookie(string $name, string $value, int $expire, string $path, string $domain, bool $secure, bool $httponly);

يمكن أن تقبل الدالة setcookie() المعلمات التالية:

    الاسم: اسم ملف تعريف الارتباط الذي سيتم استخدامه للوصول إلى قيمته

    القيمة: قيمة ملف تعريف الارتباط أو محتوياته - أي نص أبجدي رقمي لا يزيد حجمه عن 4 كيلو بايت

    انتهاء الصلاحية (اختياري): تاريخ انتهاء الصلاحية الذي يتم بعده تدمير ملفات تعريف الارتباط. لو هذه المعلمةلم يتم تعيينه أو يساوي 0، فسيتم إتلاف ملف تعريف الارتباط بعد إغلاق المتصفح.

    المسار (اختياري): المسار إلى الدليل الموجود على الخادم الذي ستتوفر له ملفات تعريف الارتباط. إذا حددت "/"، فستكون ملفات تعريف الارتباط متاحة في جميع أنحاء الموقع. إذا قمت بتعيين "/mydir/" على سبيل المثال، فلن يمكن الوصول إلى ملفات تعريف الارتباط إلا من الدليل / ميدير /"وجميع الدلائل الفرعية الخاصة به. القيمة الافتراضية هي الدليل الحالي حيث تم تثبيت ملفات تعريف الارتباط.

    المجال (اختياري): يحدد المجال الذي ستكون ملفات تعريف الارتباط متاحة له. إذا كان نطاق المستوى الثاني، على سبيل المثال، localhost.com، فإن ملفات تعريف الارتباط متاحة لموقع localhost.com بأكمله، بما في ذلك نطاقاته الفرعية مثل blog.localhost.com.

    إذا تم تحديد نطاق فرعي blog.localhost.com، فإن ملفات تعريف الارتباط متاحة فقط ضمن هذا النطاق الفرعي.

    آمن (اختياري): يحدد أنه يجب إرسال قيمة ملف تعريف الارتباط عبر HTTPS. إذا تم التعيين على true، فلن يتم تمرير ملف تعريف الارتباط من العميل إلى الخادم إلا في حالة إنشاء اتصال آمن. الافتراضيات كاذبة.

    httponly (اختياري): إذا كان صحيحًا، فلن يمكن الوصول إلى ملفات تعريف الارتباط إلا عبر بروتوكول http. أي أن ملفات تعريف الارتباط في هذه الحالة لن تكون متاحة للغات البرمجة النصية، على سبيل المثال، JavaScript. بشكل افتراضي، المعلمة خاطئة

لنحفظ ملفات تعريف الارتباط:

$value1 = "سنغافورة"; $value2 = "الصينية"; setcookie("city", $value1); setcookie("language", $value2, time()+3600); // مدة الصلاحية 1 ساعة

تم تعيين ملفي تعريف الارتباط هنا: "المدينة" و"اللغة". يتم تدمير ملف تعريف الارتباط الأول بعد إغلاق المتصفح، والثاني بعد 3600 ثانية، أي بعد ساعة

تلقي ملفات تعريف الارتباط

للحصول على ملف تعريف الارتباط يمكنك استخدام global مجموعة النقابي $_COOKIEعلى سبيل المثال، $_COOKIE["city"] . لذلك، نحصل على ملفات تعريف الارتباط المحفوظة مسبقًا:

إذا كان (isset($_COOKIE["city"]) صدى "المدينة: " . $_COOKIE["المدينة"] . "
"; if (isset($_COOKIE["language"])) echo "Language: " . $_COOKIE["language"];

تخزين المصفوفات في ملفات تعريف الارتباط

يحتوي حفظ المصفوفات في ملفات تعريف الارتباط على بعض الميزات الخاصة. على سبيل المثال، لنحفظ المصفوفة التالية:

Setcookie("lan", "PHP"); setcookie("lan", "C#"); setcookie("lan", "Java");

الآن نحصل عليه ونعرضه على الصفحة:

إذا (isset($_COOKIE["lan"])) ( foreach ($_COOKIE["lan"] كـ $name => $value) ( ​​​​$name = htmlspecialchars($name); $value = htmlspecialchars($value) ); صدى "$name.$value
"; } }

إزالة ملفات تعريف الارتباط

لحذف ملف تعريف الارتباط، ما عليك سوى تحديد وقت ما في الماضي كتاريخ انتهاء الصلاحية:

Setcookie("city", ", time() - 3600);

(بي إتش بي 4، بي إتش بي 5، بي إتش بي 7)

setcookie - يرسل ملف تعريف الارتباط

وصف

بول com.setcookie (سلسلة اسم $ [, سلسلة قيمة $ [, كثافة العمليات $ انتهاء الصلاحية = 0 [, مسار السلسلة $ [, سلسلة $ المجال [, منطقي $آمن = خطأ [, منطقي $httponly = خطأ ]]]]]])

تعيين ملف تعريف الارتباط ()يحدد ملف تعريف الارتباط الذي سيتم إرساله إلى العميل مع رؤوس HTTP الأخرى. مثل أي رأس آخر، يجب إرسال ملف تعريف الارتباط لقبل إخراج أي بيانات نصية أخرى (هذا أحد قيود البروتوكول). وهذا يعني أنه في البرنامج النصي، يجب وضع استدعاءات هذه الوظيفة قبل بقية الإخراج، بما في ذلك إخراج العلامات و وكذلك الأسطر والمسافات الفارغة.

بمجرد تمريره إلى العميل، سيكون ملف تعريف الارتباط متاحًا من خلال المصفوفتين $_COOKIE و$HTTP_COOKIE_VARS في المرة التالية التي يتم فيها تحميل الصفحة. يرجى العلم أن الكائنات العالمية الفائقة مثل $_COOKIE أصبحت متاحة فقط في PHP 4.1.0.

قيم ملفات تعريف الارتباط موجودة أيضًا في $_REQUEST .

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

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

تنتهي الوقت الذي تنتهي فيه صلاحية ملف تعريف الارتباط. هذا هو الطابع الزمني لنظام Unix، مما يعني أنه عدد الثواني منذ العصر. بمعنى آخر، يُنصح بضبط هذا الوقت باستخدام الوظيفةوقت() ، مضيفًا الوقت بالثواني الذي يجب أن تنتهي صلاحية ملف تعريف الارتباط بعده. أو يمكنك استخدام الوظيفة. مكتايم ()الوقت ()+60*60*24*30

سيتم تعيين تاريخ انتهاء صلاحية ملف تعريف الارتباط على 30 يومًا. إذا تم تعيينه على 0 أو تم حذفه، فستنتهي صلاحية ملف تعريف الارتباط في نهاية الجلسة (عندما يكون المتصفح مغلقًا).:

تعليق قد تلاحظ أن انتهاء الصلاحية يأخذ طابعًا زمنيًا لنظام Unix كقيمة له ويخزنه بالتنسيق Wdy، يوم-إثنين-YYYY HH:MM:SS بتوقيت جرينتش

. يقوم PHP بإجراء التحويل الداخلي تلقائيًا.

طريق "/" المسار إلى الدليل الموجود على الخادم الذي ستتوفر منه ملفات تعريف الارتباط. إذا قمت بتعيين ستكون ملفات تعريف الارتباط متاحة في جميع أنحاء النطاق. إذا قمت بتعيين"/فو/" لن يمكن الوصول إلى ملفات تعريف الارتباط إلا من الدليل/فو/ وجميع الدلائل الفرعية الخاصة به (على سبيل المثال،/فو/بار/

) مجال المجال . القيمة الافتراضية هي الدليل الحالي حيث تم تثبيت ملف تعريف الارتباط. المجال الذي تتوفر فيه ملفات تعريف الارتباط. تحديد المجال"www.example.com" سيجعل ملفات تعريف الارتباط متاحة في النطاق الفرعيوالمجالات الفرعية للطلبات العليا. ملفات تعريف الارتباط متاحة لمستويات منخفضة مثل "example.com"، سيكون متاحًا في جميع النطاقات الفرعية بأعلى المستويات، بما في ذلك المجال الذي تتوفر فيه ملفات تعريف الارتباط. تحديد المجال. قد تتطلب المتصفحات الأقدم التي تتبع RFC 2109 القديمة . قبل المجال بحيث يتم تضمين جميع النطاقات الفرعية.

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

عند تمرير ملف تعريف الارتباط من الخادم إلى العميل، يكون الأمر متروكًا لمبرمج خادم الويب للتأكد من نقل ملفات تعريف الارتباط من هذا النوع عبر قناة آمنة (انتبه إلى $_SERVER["HTTPS"]).

هتبونلي حقيقيإذا تم تعيينها لن يمكن الوصول إلى ملفات تعريف الارتباط إلا عبر بروتوكول HTTP.أي أن ملفات تعريف الارتباط في هذه الحالة لن تكون متاحة للغات البرمجة النصية مثل JavaScript. تم اقتراح هذه الميزة كإجراء يقلل بشكل فعال من سرقة الهوية من خلال حقيقيأو هجمات XSS.

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

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

يعمل بنجاح، وسوف يعود

.

ومع ذلك، لا يعني هذا أن تطبيق العميل (المتصفح) قد قبل ملف تعريف الارتباط وعالجه بشكل صحيح. تعيين ملف تعريف الارتباط ()

أمثلة" ;!}

فيما يلي بعض الأمثلة حول كيفية إرسال ملفات تعريف الارتباط:
المثال رقم 1 مثال الاستخدام $value = "شيء ما في مكان ما
Setcookie("TestCookie", $value);
?>

setcookie("TestCookie", $value, time()+ 3600); /* مدة الصلاحية ساعة واحدة */ setcookie ("TestCookie" , $value , time ()+ 3600 , "/~rasmus/" , "example.com" , 1);

تجدر الإشارة إلى أن قيمة ملف تعريف الارتباط هي عنوان URL مشفر قبل إرسالها إلى العميل. عند استلامها مرة أخرى، يتم فك تشفير قيمة ملف تعريف الارتباط ووضعها في متغير يحمل نفس اسم اسم ملف تعريف الارتباط. إذا كنت لا تريد ترميز القيم، فاستخدم الوظيفة
setrawcookie()
(يعمل في PHP 5). يمكنك عرض محتويات ملفات تعريف الارتباط الاختبارية الخاصة بنا عن طريق تشغيل أحد الأمثلة التالية:

// اطبع قيمة ملف تعريف ارتباط محددة
صدى $_COOKIE ["TestCookie"]؛
?>

المثال رقم 2 مثال على حذف ملفات تعريف الارتباط باستخدام تعيين ملف تعريف الارتباط ()

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

توضح الأمثلة أدناه كيفية إزالة ملفات تعريف الارتباط المعينة في الأمثلة السابقة:
// قم بتعيين تاريخ انتهاء الصلاحية قبل ساعة
setcookie("TestCookie", ", time() - 3600);
?>

setcookie ("TestCookie" , "" , الوقت () - 3600 , "/~rasmus/" , "example.com" , 1); تعيين ملف تعريف الارتباط ()مثال رقم 3

والمصفوفات

من الممكن وضع المصفوفات في ملفات تعريف الارتباط. للقيام بذلك، يجب إعطاء اسم لكل ملف تعريف ارتباط وفقًا لقواعد تسمية المصفوفات. تتيح لك هذه الميزة وضع العديد من القيم بعدد العناصر الموجودة في المصفوفة.
عند استرجاعها مرة أخرى، سيتم وضع كل هذه القيم في مصفوفة تسمى ملف تعريف الارتباط هذا:
//إرسال ملف تعريف الارتباط
setcookie("ملف تعريف الارتباط" , "cookiethree");

setcookie("ملف تعريف الارتباط" , "cookietwo" );
setcookie("ملف تعريف الارتباط" , "cookieone");
// بعد إعادة تحميل الصفحة، قم بعرض ملف تعريف الارتباط
إذا (isset($_COOKIE [ "ملف تعريف الارتباط" ])) (
foreach ($_COOKIE ["ملف تعريف الارتباط"] كـ $name => $value ) (
$name = htmlspecialchars($name);
$value = htmlspecialchars($value);
}
}
?>

صدى "اسم $: قيمة $ \n" ;في البرنامج النصي، أو يمكنك تعيين التوجيه

سيتم تعيين تاريخ انتهاء صلاحية ملف تعريف الارتباط على 30 يومًا. إذا تم تعيينه على 0 أو تم حذفه، فستنتهي صلاحية ملف تعريف الارتباط في نهاية الجلسة (عندما يكون المتصفح مغلقًا).:

input_buffering

  • في ملف php.ini أو ملفات تكوين الخادم. ملاحظات عامة:.
  • لن تصبح ملفات تعريف الارتباط مرئية إلا بعد إعادة تحميل الصفحة التي يجب أن تكون مرئية لها. للتحقق مما إذا تم تعيين ملفات تعريف الارتباط بشكل صحيح، تحقق منها في المرة التالية التي تقوم فيها بتحميل الصفحة قبل انتهاء صلاحيتها. يتم تحديد تاريخ انتهاء صلاحية ملف تعريف الارتباط في معلمة انتهاء الصلاحية. من السهل التحقق من وجود ملف تعريف الارتباط بمكالمة بسيطة هجمات XSS print_r($_COOKIE);
  • عند حذف ملفات تعريف الارتباط، يجب تحديد نفس الإعدادات كما هو الحال عند تثبيتها. إذا قمت بتعيين القيمة على سلسلة فارغة أو هجمات XSS، وقم بتعيين المعلمات المتبقية وفقًا للاستدعاء السابق الذي قام بتعيين ملف تعريف الارتباط، ثم سيتم حذف ملف تعريف الارتباط الذي يحمل الاسم المحدد من جهاز العميل. يبدو داخليًا كما يلي: تم تعيين ملف تعريف الارتباط على "محذوف" وتم إرجاع تاريخ انتهاء الصلاحية لمدة عام واحد. 0 منذ تحديد القيمة هجمات XSSو 1 منذ تحديد القيمة حقيقي.
  • سيتم حذف ملف تعريف الارتباط، ويجب عدم تعيين ملفات تعريف الارتباط على قيم منطقية. بدلا من ذلك يمكنك استخدام ل. لا يوصى باستخدام الوظيفة لهذه الأغراض تسلسل ()لأن هذا يؤثر سلبًا على أمان البرنامج النصي.

لمكالمات متعددة تعيين ملف تعريف الارتباط ()يتم تنفيذ الوظائف بالترتيب الذي تم استدعاؤها به.

تدعم PHP ملفات تعريف الارتباط HTTP بشفافية. ملفات تعريف الارتباط هي آلية لتخزين البيانات في المتصفح البعيد وبالتالي تتبع أو تحديد المستخدمين العائدين. يمكنك تعيين ملفات تعريف الارتباط باستخدام تعيين ملف تعريف الارتباط ()أو /* مدة الصلاحية ساعة واحدة */وظيفة. تعد ملفات تعريف الارتباط جزءًا من رأس HTTP، لذلك تعيين ملف تعريف الارتباط ()يجب استدعاؤه قبل إرسال أي مخرجات إلى المتصفح. وهذا هو نفس القيد الذي رأس ()لديه. يمكنك استخدام وظائف التخزين المؤقت للإخراج لتأخير إخراج البرنامج النصي حتى تقرر ما إذا كنت تريد تعيين أي ملفات تعريف ارتباط أو إرسال أي رؤوس أم لا.

سيتم تلقائيًا تضمين أي ملفات تعريف ارتباط يتم إرسالها إلى الخادم من العميل في مصفوفة عمومية تلقائية $_COOKIE إذا كانت المتغيرات_الترتيبية تحتوي على "C". إذا كنت ترغب في تعيين قيم متعددة لملف تعريف ارتباط واحد، فما عليك سوى إضافتها إلى اسم ملف تعريف الارتباط.

منذ 15 عاما

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

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

ستيوارت ليفينغز

منذ 8 أشهر

unset($_COOKIE [ "ملف تعريف الارتباط" ]);
?>

قم بالضغط على مؤشر متغير، حيث ستظل ملفات تعريف الارتباط موجودة وتستمر في إرسالها إلى الخادم العميل، والعكس صحيح.
عاصم كما هو:

$_COOKIE [ "ملف تعريف الارتباط"] = "شريط foo" ؛
?>

لا يتم إنشاء أو تغيير قيمة ملف تعريف الارتباط، إلا أثناء التنفيذ الفعلي، أو القيمة التي ستكون مقبولة للخادم العميل، والعكس صحيح سيكون أصليًا

لاستبعاد أو تغيير ما عليك فعله دائمًا من اكتشاف القيمة المضادة مع setcookie() أو setrawcookie() أو header()، فإن هذا الأخير ليس كثيرًا وسهل الاستخدام بشكل مبرر

منذ 13 عاما

منذ 13 عاما

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

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

ب- لأي سبب من الأسباب، يواجه الخادم تباطؤًا ولا يتم إرجاع الاستجابة بالمفتاح الجديد (الذي حل محل المفتاح القديم على الخادم) إلى المتصفح بالسرعة الكافية. يتعب المستخدم من الانتظار وينقر في مكان آخر. يتم تسجيل خروجه لأن هذه النقرة الثانية ترسل المفتاح القديم الذي لن يتطابق مع المفتاح الموجود على الخادم الخاص بك.

كان الحل الذي قدمناه هو إعداد فترة سماح حيث يظل المفتاح القديم صالحًا (المفتاح الحالي و السابقتم الاحتفاظ بالمفتاحين في جميع الأوقات، واستخدمنا 15 ثانية كفترة سماح حيث لا يزال من الممكن استخدام المفتاح القديم). وهذا له عيب يتمثل في زيادة النافذة الزمنية لشخص ما لاختراق الجلسة، ولكن إذا قمت بربط صلاحية المفتاح القديم بعنوان IP و/أو سلسلة وكيل المستخدم، فستظل تحصل على أمان جيد للجلسة مع عدد قليل جدًا من العناصر غير المرغوب فيها إنهاء الجلسة.

منذ 10 سنوات

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

منذ 14 عاما

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

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

ملاحظة مهمة: يؤدي هذا إلى تعطيل إمكانية استخدام زر الرجوع إذا قمت بإرسال معرف الجلسة عبر POST أو GET.

منذ 12 عاما

إذا كنت تريد جلسة آمنة غير مرتبطة بعنوان IP الخاص بالعميل أنت تستطيعاستخدم الطريقة الصالحة لاستعلام واحد أدناه، ولكن للحماية من السيناريو الذي ينقر فيه المستخدم الشرعي مرتين، يمكنك استخدام وظيفة إيقاف التشغيل (register_shutdown_function)*.

وسوف يتحقق لمعرفة ما إذا كان البرنامج النصي قد تم إنهاؤه قبل الأوان (connection_aborted)، وإعادة تعيين معرف الجلسة الصالح. وبهذه الطريقة، يظل صالحًا عندما يقوم المستخدم بتقديم الطلب الثاني. إذا انتهى البرنامج النصي بشكل صحيح، فسيتم استخدام معرف الجلسة الجديد بدلاً من ذلك.

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

:: مثال زائف:
::
::
::
:: 1. احصل على معرف (معرفات) الجلسة من ملف تعريف الارتباط
:: 2. إذا كان أحد معرفات الجلسة لا يزال صالحًا (أي إذا كان هناك مساحة تخزين مرتبطة به - في قاعدة البيانات أو الملف أو أي شيء آخر)
:: ____2.1. افتح الجلسة
:: 3. إنشاء معرف جلسة جديد
:: 4. احفظ معرف الجلسة الجديد بالمعرف المستخدم للتو في ملف تعريف الارتباط
:: 5. سجل وظيفة الاغلاق
::
::
::
:: 1. إذا انتهى البرنامج النصي قبل الأوان
:: ____1.1. احفظ بيانات الجلسة باستخدام معرف الجلسة القديم
:: 2. آخر
:: ____2.1. احفظ بيانات الجلسة باستخدام معرف الجلسة الجديد
:: ____2.2. تأكد من إضافة معرف الجلسة القديم إلى قائمة المعرفات (المستخدمة للغرض الموضح أدناه)
:: ____2.3. قم بإزالة مساحة تخزين الجلسة القديمة

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

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

وأخيرًا، (كملاحظة جانبية) يمكننا إخفاء تفاصيل تسجيل الدخول (إذا كان العميل لديه دعم لجافا سكريبت) عن طريق التقاط النموذج كما تم إرساله، وأخذ الطابع الزمني الحالي وإضافته إلى النموذج في كائن نموذج مخفي تم إنشاؤه ديناميكيًا، استبدل حقل كلمة المرور بكلمة مرور جديدة هي MD5 (أو ما شابه) للطابع الزمني وكلمة المرور الحقيقية. على جانب الخادم، سيأخذ البرنامج النصي الطابع الزمني، وينظر إلى كلمة المرور الحقيقية للمستخدم ويصنع MD5 المناسب إذا كانا متطابقين، فحسنًا، إن لم يكن كذلك، (سيعمل هذا بالطبع فقط عندما يكون لدينا مستخدم لديه جلسة الذي تم تسجيل دخوله مسبقًا، نظرًا لأننا نعرف كلمة المرور (كلمات المرور) التي من المفترض أن يمتلكها.) إذا تم حفظ بيانات اعتماد المستخدم كـ md5 (اسم المستخدم + كلمة المرور)، فاطلب ببساطة اسم المستخدم وكلمة المرور، ثم md5 ثم md5 الطابع الزمني ورصيد المستخدم.

إذا كنت بحاجة إلى جافا سكريبت لـ md5.

سنتحدث في درس اليوم عن العمل مع ملفات تعريف الارتباط في لغة PHP. لنبدأ بما هو ولماذا هو مطلوب ولماذا ظهر في المقام الأول.

ما هي استخدامات ملفات تعريف الارتباط؟

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

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

من أين تأتي ملفات تعريف الارتباط؟

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

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

أي أن الخادم يقول تقريبًا: "مرحبًا أيها المتصفح، قم بإنشاء إدخال لي بالمفتاح "تسجيل الدخول" والقيمة "admin"، وآخر بالمفتاح "كلمة المرور" والقيمة "123". بعد ذلك، يبدأ المتصفح بإرسال بيانات إضافية مثل:

تسجيل الدخول: كلمة مرور المسؤول: 123

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

عن وقت الحياة

وفي الوقت نفسه، يحتوي ملف تعريف الارتباط على TTL (مدة البقاء). أي أن هذه السجلات قد تكون مؤقتة. ويشير الخادم أيضًا إلى هذا العمر عند تثبيت ملف تعريف الارتباط في المتصفح. بفضل هذا، يمكنك جعل الجلسة تستمر لمدة نصف ساعة. وبعد هذا الوقت سيحتاج المستخدم إلى تسجيل الدخول مرة أخرى. ربما لاحظت هذا أثناء العمل على العديد من مواقع الويب.

كيفية العمل مع ملفات تعريف الارتباط في PHP

لذلك، لدينا فهم أساسي لكيفية عمل ملفات تعريف الارتباط. دعونا الآن نرى كيف يمكنك العمل معهم في PHP.

لنقم بإنشاء ملف في مشروعنا يسمى viewCookies.php. ولنضع فيه الكود التالي .

كما كان يجب أن تخمن الآن، $_COOKIEهي مصفوفة عالمية أخرى في لغة PHP، تشبه المصفوفات $_GETو $_POST. فهو فقط يقوم بتخزين جميع ملفات تعريف الارتباط التي أرسلها المتصفح كجزء من الطلب الحالي.

دعونا نلقي نظرة على كيفية عمل هذا البرنامج النصي عن طريق فتح الصفحة في المتصفح: http://myproject.loc/viewCookies.php

كما نرى، هذه المصفوفة فارغة حاليًا. دعونا نملأها :) للقيام بذلك، نحتاج إلى تثبيت نوع من ملفات تعريف الارتباط في المتصفح. في PHP، يتم استخدام الوظيفة لهذا الغرض setcookie($name, $value, $ttl, $path)

المعلمات التي تم تمريرها:

  • $name - اسم ملف تعريف الارتباط
  • قيمة $ - قيمتها
  • $ttl - مدى الحياة. إذا حددت 0، فسيتم تثبيت ملف تعريف الارتباط إلى الأبد (حتى يتم حذفه).
  • $path - المسار في شريط العناوين. إذا حددت "/"، فستكون ملفات تعريف الارتباط متاحة من جميع الأدلة الموجودة على الموقع. على سبيل المثال، في كل من http://myproject.loc/ و http://myproject.loc/posts/ . إذا قمت بتعيين "/posts/"، فلن يمكن الوصول إلى ملفات تعريف الارتباط إلا من الدليل http://myproject.loc/posts/ وجميع الأدلة الفرعية الخاصة به (على سبيل المثال، http://myproject.loc/posts/new/). القيمة الافتراضية هي الدليل الحالي، حيث تم تعيين ملف تعريف الارتباط. إذا أردنا أن يكون ملف تعريف الارتباط متاحًا في جميع أنحاء الموقع، فسنحتاج إلى تعيين هذه القيمة على "/".

هناك العديد من المعلمات الأخرى، يمكنك أن تقرأ عنها في الوثائق الرسمية.

الآن دعونا نجرب هذه الوظيفة عمليًا. لنقم بإنشاء ملف يسمى setCookies.php ونكتب فيه الكود التالي:

بعد ذلك، انتقل إلى http://myproject.loc/setCookies.php، حيث سنرى صفحة فارغة. كما قلنا من قبل، فإن العمل مع ملفات تعريف الارتباط غير مرئي للمستخدم.

ومع ذلك، يمكن دائمًا رؤية هذا العمل في وحدة تحكم مطوري Google Chrome. لنفتحها (بالضغط على F12)، وانتقل إلى علامة التبويب "الشبكة"، وقم بتحديث الصفحة في المتصفح، وابحث عنها في قائمة البيانات التي تم تنزيلها (وهي الوحيدة الموجودة هناك).

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

وهكذا تم تثبيت ملفات تعريف الارتباط بنجاح في المتصفح. دعنا ننتقل الآن إلى صفحتنا التي تعرض مصفوفة $_COOKIE - http://myproject.loc/viewCookies.php

كما نرى، يتم الآن إرسال ملفات تعريف الارتباط المثبتة مسبقًا في المتصفح إلى الخادم. يمكنك أيضًا رؤيتها في الطلب من خلال النظر إلى قسم "رؤوس الطلبات" في وحدة تحكم المطور.

إذا كنت بحاجة إلى رؤية جميع ملفات تعريف الارتباط المتوفرة في المتصفح لموقع معين، فيمكنك عرضها في نفس وحدة تحكم مطور Google Chrome. للقيام بذلك، انتقل إلى علامة التبويب "التطبيق"، وحدد عنصر ملفات تعريف الارتباط في القائمة اليسرى، وموقعنا بداخله.

سيتم عرض جميع ملفات تعريف الارتباط في قائمة مناسبة.

ماذا تحتاج لمعرفته أيضًا حول ملفات تعريف الارتباط

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

يمكنك تعيين ملف تعريف الارتباط أولاً ثم عرض النص.

كل شيء سوف يعمل بشكل رائع.

لكن لا يمكنك طباعة النص (الذي يمثل نص استجابة HTTP) ثم محاولة تعيين ملف تعريف الارتباط.

كما نرى، فإن هذا سيؤدي إلى خطأ. هذه هي الطريقة التي يعمل بها بروتوكول HTTP. أولا - العنوان، ثم - الجسم. فقط بهذه الطريقة وليس بأي طريقة أخرى.

إعداد ملفات تعريف الارتباط المتعددة

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

سيتم نقلهم بنجاح إلى العميل.

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