ما هو CGI
تتم صيانة CGI حاليًا بواسطة NCSA، والتي تحدد CGI على النحو التالي:
CGI (واجهة البوابة العامة)، واجهة البوابة العامة، هو برنامج يتم تشغيله على خادم مثل خادم HTTP ويوفر واجهة مع صفحة HTML الخاصة بالعميل.
تصفح الويب
لفهم كيفية عمل CGI بشكل أفضل، يمكننا البدء بعملية النقر فوق رابط أو عنوان URL على صفحة ويب:
1. استخدم متصفحك للوصول إلى عنوان URL والاتصال بخادم الويب HTTP.
2. بعد تلقي معلومات الطلب، سيقوم خادم الويب بتحليل عنوان URL والتحقق مما إذا كان الملف الذي تم الوصول إليه موجودًا على الخادم، وإذا كان الملف موجودًا، فسوف يُرجع محتوى الملف، وإلا فسيُرجع رسالة خطأ.
3. يتلقى المتصفح معلومات من الخادم ويعرض الملف المستلم أو رسالة الخطأ.
يمكن أن تكون برامج CGI عبارة عن برامج نصية Python، أو برامج نصية PERL، أو برامج نصية SHELL، أو برامج C أو C++، وما إلى ذلك.
مخطط معماري CGI

دعم وتكوين خادم الويب
قبل تنفيذ برمجة CGI، تأكد من أن خادم الويب الخاص بك يدعم CGI وقام بتكوين معالج CGI.
يدعم Apache تكوين CGI:
قم بإعداد دليل CGI:
الاسم المستعار للسيناريو /cgi-bin/ /var/www/cgi-bin/
يتم حفظ جميع برامج CGI الخاصة بتنفيذ خادم HTTP في دليل تم تكوينه مسبقًا. يُسمى هذا الدليل دليل CGI، ويُسمى حسب التقليد /var/www/cgi-bin.
تحتوي ملفات CGI على امتداد .cgi، ويمكن لـ Perl أيضًا استخدام امتداد .pl.
افتراضيًا، يتم تشغيل تكوين خادم Linux في دليل cgi-bin في /var/www.
إذا كنت تريد تحديد دليل آخر لتشغيل برامج CGI النصية، فيمكنك تعديل ملف التكوين httpd.conf كما يلي:
<Directory "/var/www/cgi-bin"> لا تسمح بالتجاوز لا شيء خيارات + أمر ExecCGI يسمح، يرفض السماح من الكل</Directory>
أضف اللاحقة .pl إلى AddHandler حتى نتمكن من الوصول إلى ملفات البرنامج النصي Perl التي تنتهي بـ .pl:
AddHandler cgi-script .cgi .pl .py
أول برنامج CGI
أدناه نقوم بإنشاء ملف test.cgi، الكود كما يلي:
كود test.cgi
#!/usr/bin/Perl مطبعة " نوع المحتوى: نص/html r n r n " ; ' <html> ' طباعة طباعة ' <الرأس> ' ; ' <meta
charset ="utf-8"> ' ; ' <title>البرنامج التعليمي
للمبرمج (codercto.com)</title> ' ; ' </head> ' ; طباعة ' <body> ' ; ' <h2>مرحبًا يا كلمة! </h2> ' ; <p> أول برنامج CGI من البرنامج التعليمي للمبرمجين. </p> ' ; ' </body> ' ; ' </html> ' ; ثم قم بفتح http://localhost/cgi-bin/test.cgi من خلال المتصفح، وتكون نتائج الإخراج كما يلي:
يتم إرسال محتوى الإخراج للسطر الأول من البرنامج النصي "نوع المحتوى: نص/htmlrnrn" إلى المتصفح ويخبر المتصفح أن نوع المحتوى المعروض هو "نص/html".
رأس HTTP
يعد "نوع المحتوى: نص/html" الموجود في محتوى ملف test.cgi جزءًا من رأس HTTP، والذي يتم إرساله إلى المتصفح لإخبار المتصفح بنوع محتوى الملف.
تنسيق رأس HTTP كما يلي:
اسم حقل HTTP: محتوى الحقل
على سبيل المثال:
نوع المحتوى:نص/htmlrnrn
يقدم الجدول التالي المعلومات شائعة الاستخدام في رؤوس HTTP في برامج CGI:
| رأس | يصف |
|---|
| نوع المحتوى: | معلومات MIME المطلوبة المقابلة للكيان. على سبيل المثال: نوع المحتوى: نص/html |
| انتهاء الصلاحية: التاريخ | تاريخ ووقت انتهاء صلاحية الاستجابة |
| الموقع: URL | يُستخدم لإعادة توجيه المستلم إلى موقع عنوان URL غير المطلوب لإكمال الطلب أو تحديد مورد جديد. |
| آخر تعديل: التاريخ | آخر وقت تعديل للمورد المطلوب |
| طول المحتوى: ن | طول المحتوى المطلوب |
| مجموعة ملفات تعريف الارتباط: سلسلة | قم بتعيين ملف تعريف ارتباط HTTP |
متغيرات بيئة CGI
تتلقى جميع برامج CGI متغيرات البيئة التالية، والتي تلعب دورًا مهمًا في برامج CGI:
| اسم متغير | يصف |
|---|
| CONTENT_TYPE | تشير قيمة متغير البيئة هذا إلى نوع MIME للمعلومات التي يتم تمريرها. حاليًا، متغير البيئة CONTENT_TYPE بشكل عام هو: application/x-www-form-urlencoded، مما يشير إلى أن البيانات تأتي من نماذج HTML. |
| CONTENT_LENGTH | إذا كانت طريقة نقل المعلومات بين الخادم وبرنامج CGI هي POST، فإن متغير البيئة هذا هو عدد بايتات البيانات الصالحة التي يمكن قراءتها من الإدخال القياسي STDIN. يجب استخدام متغير البيئة هذا عند قراءة البيانات المدخلة. |
| HTTP_COOKIE | محتوى ملفات تعريف الارتباط في العميل. |
| HTTP_USER_AGENT | توفير معلومات متصفح العميل بما في ذلك أرقام الإصدارات أو بيانات الملكية الأخرى. |
| PATH_INFO | تمثل قيمة متغير البيئة هذا معلومات المسار الأخرى مباشرة بعد اسم برنامج CGI. غالبًا ما يظهر كمعلمة لبرامج CGI. |
| QUERY_STRING | إذا كانت طريقة نقل المعلومات بين الخادم وبرنامج CGI هي GET، فإن قيمة متغير البيئة هذا هي المعلومات المنقولة. تتبع هذه المعلومات اسم برنامج CGI، مفصولاً بعلامة استفهام '؟'. |
| REMOTE_ADDR | قيمة متغير البيئة هذا هي عنوان IP الخاص بالعميل الذي يرسل الطلب، مثل 192.168.1.67 أعلاه. هذه القيمة موجودة دائما. وهو المعرف الفريد الذي يحتاج عميل الويب إلى توفيره لخادم الويب، والذي يمكن استخدامه في برامج CGI للتمييز بين عملاء الويب المختلفين. |
| REMOTE_HOST | تحتوي قيمة متغير البيئة هذا على اسم المضيف للعميل الذي أرسل طلب CGI. إذا كان الاستعلام الذي تريد الاستعلام عنه غير مدعوم، فليست هناك حاجة لتعريف متغير البيئة هذا. |
| REQUEST_METHOD | يوفر الطريقة التي يتم من خلالها استدعاء البرنامج النصي. بالنسبة للنصوص البرمجية التي تستخدم بروتوكول HTTP/1.0، يكون GET وPOST فقط ذا معنى. |
| SCRIPT_FILENAME | المسار الكامل لبرنامج CGI النصي |
| SCRIPT_NAME | اسم البرنامج النصي CGI |
| SERVER_NAME | هذا هو اسم المضيف أو الاسم المستعار أو عنوان IP لخادم الويب الخاص بك. |
| SERVER_SOFTWARE | تحتوي قيمة متغير البيئة هذا على اسم ورقم إصدار خادم HTTP الذي يستدعي برنامج CGI. على سبيل المثال، القيمة أعلاه هي Apache/2.2.14(Unix) |
ما يلي هو برنامج نصي CGI بسيط يقوم بإخراج متغيرات بيئة CGI:
مثال
#!/usr/bin/Perl مطبعة " نوع المحتوى: نص/html n n " ; ' <meta
charset ="utf-8"> ' ; " <font size=+1>متغير البيئة:</font> n " ; ( نوع مفاتيح %ENV ) { مطبعة " <b> $_ </b>: $ENV { $_ } <br> n " } 1 ؛ تنزيل الملف
إذا أردنا تنزيل الملفات من خلال Perl CGI، فسنحتاج إلى تعيين معلومات رأس مختلفة، كما هو موضح أدناه:
مثال
#!/usr/bin/Perl # رأس HTTP مطبعة " نوع المحتوى:application/octet-stream; name= " FileName " r n " ; " ترتيب المحتوى: المرفق؛ اسم الملف = " اسم الملف " r n n " ; # سيتم سماع محتوى الملف الفعلي. يفتح ( ملف ، " <اسم الملف " ) ؛ بينما ( اقرأ ( FILE ، $buffer ، 100 ) ) { طباعة ( " $ buffer " ) } نقل البيانات باستخدام طريقة GET
ترسل طريقة GET معلومات المستخدم المشفرة إلى الخادم، ويتم تضمين معلومات البيانات في عنوان URL للصفحة المطلوبة، مفصولة بـ "؟"، كما هو موضح أدناه:
http://www.test.com/cgi-bin/test.cgi?key1=value1&key2=value2
بعض الملاحظات الإضافية حول طلبات GET:
يمكن تخزين طلبات GET مؤقتًا
تظل طلبات GET في سجل المتصفح
يمكن وضع إشارة مرجعية على طلبات GET
لا ينبغي استخدام طلبات GET عند التعامل مع البيانات الحساسة
طلبات GET لها حدود للطول
يجب استخدام طلبات GET فقط لاسترداد البيانات
مثال بسيط لعنوان URL: طريقة GET
ما يلي هو عنوان URL بسيط يستخدم أسلوب GET لإرسال معلمتين إلى برنامج test.cgi:
/cgi-bin/test.cgi?name=Coder Tutorial&url=http://www.codercto.com
ما يلي هو رمز ملف test.cgi:
مثال
#!/usr/bin/Perl محلي ( $buffer , @pairs , $pair , $name , $value , %FORM ) # قراءة المعلومات النصية $ENV { ' REQUEST_METHOD ' } =~ tr / a - z / A - Z / ; ( $ENV { ' REQUEST_METHOD ' } مكافئ " يحصل " ) { $ buffer = $ENV { ' QUERY_STRING ' } ; # قراءة معلومات زوج الاسم/القيمة @pairs = Split ( /&/, $ buffer ) ; $زوج ( @أزواج ) { ( $ name , $ value ) = تقسيم ( / = / , $ pair ) ; $ value = ~ tr / + / / ; ) / على سبيل المثال $ FORM { $name } = $ value ; $name = $FORM { name } ; $url = $ FORM { url } ; " نوع المحتوى: نص/html r n r n " ; " <html> " طباعة " <الرأس> " ؛ طباعة ' <meta
charset ="utf-8"> ' ; ' <title>البرنامج التعليمي
للمبرمج (codercto.com)</title> ' ; " < /الرأس > " ؛ " <body> " طباعة " <h2> $name URL : $url </h2> " ; " </body> " ؛ طباعة " </html> " ; قم بفحص المتصفح وكانت النتيجة كما يلي:
مثال نموذجي بسيط: طريقة GET
ما يلي هو نموذج HTML يستخدم أسلوب GET لإرسال بياناتين إلى الخادم. البرنامج النصي للخادم المقدم هو أيضًا ملف test.cgi. رمز test.html كما يلي:
test.html رمز الملف
< ! أتش تي أم أل > <أتش تي أم أل> <الرأس> < ميتا مجموعة الأحرف = " utf-8 " > <title> البرنامج التعليمي للمبرمج ( codercto.com ) </title> </ الرأس > <الجسم> < النموذج الإجراء = " /cgi-bin/test.cgi " الطريقة = " الحصول على " > اسم الموقع: < input اكتب = " نص " الاسم = " الاسم " > < ر /> عنوان URL للموقع: < input اكتب = " نص " الاسم = " عنوان URL " /> < الإدخال اكتب = " إرسال " القيمة = " إرسال " /> </النموذج> </الجسم> </html> في المتصفح، يكون تأثير التنفيذ كما يلي:
تمرير البيانات باستخدام طريقة POST
يعتبر استخدام طريقة POST أكثر أمانًا وموثوقية لنقل البيانات إلى الخادم. تحتاج بعض المعلومات الحساسة، مثل كلمات مرور المستخدم، إلى استخدام POST لنقل البيانات.
ما يلي أيضًا هو test.cgi، والذي يمكنه أيضًا التعامل مع بيانات نموذج POST التي يرسلها المتصفح:
كود test.cgi
#!/usr/bin/Perl محلي ( $buffer , @pairs , $pair , $name , $value , %FORM ) # قراءة المعلومات النصية $ENV { ' REQUEST_METHOD ' } =~ tr / a - z / A - Z / ; ( $ENV { ' REQUEST_METHOD ' } مكافئ " بريد " ) { قراءة ( STDIN , $buffer , $ ENV { ' CONTENT_LENGTH ' } ) } else { $ buffer = $ENV { ' QUERY_STRING ' } ; # قراءة معلومات زوج الاسم/القيمة @pairs = Split ( /&/, $ buffer ) ; $زوج ( @أزواج ) { ( $ name , $ value ) = تقسيم ( / = / , $ pair ) ; $ value = ~ tr / + / / ; ) / على سبيل المثال $ FORM { $name } = $ value ; $name = $FORM { name } ; $url = $ FORM { url } ; " نوع المحتوى: نص/html r n r n " ; " <html> " طباعة " <الرأس> " ؛ طباعة ' <meta
charset ="utf-8"> ' ; ' <title>البرنامج التعليمي
للمبرمج (codercto.com)</title> ' ; " < /الرأس > " ؛ " <body> " طباعة " <h2> $name URL : $url </h2> " ; " </body> " ؛ طباعة " </html> " ; ما يلي هو نموذج HTML يستخدم أسلوب GET لإرسال بياناتين إلى الخادم. البرنامج النصي للخادم المقدم هو أيضًا ملف test.cgi. رمز test.html كما يلي:
رمز test.html
< ! أتش تي أم أل > <أتش تي أم أل> <الرأس> < ميتا مجموعة الأحرف = " utf-8 " > <title> البرنامج التعليمي للمبرمج ( codercto.com ) </title> </ الرأس > <الجسم> < النموذج الإجراء = " /cgi-bin/test.cgi " الطريقة = " post " > اسم الموقع: < input اكتب = " نص " الاسم = " الاسم " > < ر /> عنوان URL للموقع: < input اكتب = " نص " الاسم = " عنوان URL " /> < الإدخال اكتب = " إرسال " القيمة = " إرسال " /> </النموذج> </الجسم> </html> في المتصفح، يكون تأثير التنفيذ كما يلي:
تمرير بيانات خانة الاختيار من خلال برنامج CGI
يتم استخدام خانة الاختيار لإرسال بيانات خيار واحد أو أكثر. رمز test.html هو كما يلي:
رمز test.html
< ! أتش تي أم أل > <أتش تي أم أل> <الرأس> < ميتا مجموعة الأحرف = " utf-8 " > <title> البرنامج التعليمي للمبرمج ( codercto.com ) </title> </ الرأس > <الجسم> < النموذج الإجراء = " /cgi-bin/test.cgi " الطريقة = " نشر " الهدف = " _فارغ " > < الإدخال اكتب = " مربع الاختيار " الاسم = " كوديرتو " القيمة = " على " /> البرنامج التعليمي للمبرمج < input اكتب = " مربع الاختيار " الاسم = " جوجل " القيمة = " على " /> جوجل < الإدخال اكتب = " إرسال " القيمة = " اختر الموقع " /> </النموذج> </الجسم> </html> ما يلي هو رمز ملف test.cgi:
كود test.cgi
#!/usr/bin/Perl محلي ( $buffer , @pairs , $pair , $name , $value , % FORM ) ; $ENV { ' REQUEST_METHOD ' } =~ tr / a - z / A - Z / ; ( $ENV { ' REQUEST_METHOD ' } مكافئ " بريد " ) { قراءة ( STDIN , $buffer , $ ENV { ' CONTENT_LENGTH ' } ) } else { $ buffer = $ENV { ' QUERY_STRING ' } ; # قراءة معلومات زوج الاسم/القيمة @pairs = Split ( /&/, $ buffer ) ; $زوج ( @أزواج ) { ( $ name , $ value ) = تقسيم ( / = / , $ pair ) ; $ value = ~ tr / + / / ; ) / على سبيل المثال $ FORM { $name } = $ value ; لو ( $FORM { كودركتو } ) { $codercto_flag = " ON " } else { ; $ codercto_flag = " إيقاف " } لو ( نموذج $ { جوجل } ) { $google_flag = " تشغيل " } else { ; $ google_flag = " إيقاف " } مطبعة " نوع المحتوى: نص/html r n r n " ; " <html> " طباعة " <الرأس> " ؛ طباعة ' <meta
charset ="utf-8"> ' ; ' <title>البرنامج التعليمي
للمبرمج (codercto.com)</title> ' ; " </head> " ; " <body> " طباعة " <h2> الحالة المحددة لبرنامج Coder التعليمي: $ codercto_flag </h2> " ; " <h2> حالة اختيار Google: $ google_flag </h2> " ; " </body> " ; " </html> " ; في المتصفح، يكون تأثير التنفيذ كما يلي:
تمرير بيانات الراديو من خلال برنامج CGI
يقوم الراديو بتمرير بيانات واحدة فقط إلى الخادم. رمز test.html هو كما يلي:
رمز test.html
< ! أتش تي أم أل > <أتش تي أم أل> <الرأس> < ميتا مجموعة الأحرف = " utf-8 " > <title> البرنامج التعليمي للمبرمج ( codercto.com ) </title> </ الرأس > <الجسم> < النموذج الإجراء = " /cgi-bin/test.cgi " طريقة = " نشر " الهدف = " _فارغ " > < الإدخال اكتب = " راديو " الاسم = " الموقع " القيمة = " كوديرتو " /> البرنامج التعليمي للمبرمج < input اكتب = " راديو " الاسم = " الموقع " القيمة = " جوجل " /> جوجل < الإدخال اكتب = " إرسال " القيمة = " إرسال " /> </النموذج> </الجسم> </html> رمز البرنامج النصي test.cgi كما يلي:
كود test.cgi
#!/usr/bin/Perl محلي ( $buffer , @pairs , $pair , $name , $value , % FORM ) ; $ENV { ' REQUEST_METHOD ' } =~ tr / a - z / A - Z / ; ( $ENV { ' REQUEST_METHOD ' } مكافئ " بريد " ) { قراءة ( STDIN , $buffer , $ ENV { ' CONTENT_LENGTH ' } ) } else { $ buffer = $ENV { ' QUERY_STRING ' } ; # قراءة معلومات زوج الاسم/القيمة @pairs = Split ( /&/, $ buffer ) ; $زوج ( @أزواج ) { ( $ name , $ value ) = تقسيم ( / = / , $ pair ) ; $ value = ~ tr / + / / ; ) / على سبيل المثال $ FORM { $name } = $ value ; $site = $ FORM { site } ; " نوع المحتوى: نص/html r n r n " ; " <html> " طباعة " <الرأس> " ؛ طباعة ' <meta
charset ="utf-8"> ' ; ' <title>البرنامج التعليمي
للمبرمج (codercto.com)</title> ' ; " < /الرأس > " ؛ " <body> " طباعة " <h2> موقع الويب المحدد $ site </h2> " ; " </body> " ؛ طباعة " </html> " ; في المتصفح، يكون تأثير التنفيذ كما يلي:
تمرير بيانات Textarea من خلال برنامج CGI
تقوم Textarea بنقل أسطر متعددة من البيانات إلى الخادم، ويكون رمز test.html كما يلي:
رمز test.html
< ! أتش تي أم أل > <أتش تي أم أل> <الرأس> < ميتا مجموعة الأحرف = " utf-8 " > <title> البرنامج التعليمي للمبرمج ( codercto.com ) </title> </ الرأس > <الجسم> < النموذج الإجراء = " /cgi-bin/test.cgi " طريقة = " نشر " الهدف = " _فارغ " > < منطقة النص الاسم = " محتوى النص " كولز = " 40 " الصفوف = " 4 " > أدخل المحتوى هنا... </ textarea > < الإدخال اكتب = " إرسال " القيمة = " إرسال " /> </النموذج> </الجسم> </html> رمز البرنامج النصي test.cgi كما يلي:
كود test.cgi
#!/usr/bin/Perl محلي ( $buffer , @pairs , $pair , $name , $value , %FORM ) # قراءة المعلومات $ENV { ' REQUEST_METHOD ' } =~ tr / a - z / A - Z / ; ( $ENV { ' REQUEST_METHOD ' } مكافئ " بريد " ) { قراءة ( STDIN , $buffer , $ ENV { ' CONTENT_LENGTH ' } ) } else { $ buffer = $ENV { ' QUERY_STRING ' } ; # قراءة معلومات زوج الاسم/القيمة @pairs = Split ( /&/, $ buffer ) ; $زوج ( @أزواج ) { ( $ name , $ value ) = تقسيم ( / = / , $ pair ) ; $ value = ~ tr / + / / ; ) / على سبيل المثال $ FORM { $name } = $ value ; $text_content = $ FORM { textcontent } ; " نوع المحتوى: نص/html r n r n " ; " <html> " طباعة " <الرأس> " ؛ طباعة ' <meta
charset ="utf-8"> ' ; ' <title>البرنامج التعليمي
للمبرمج (codercto.com)</title> ' ; " < /الرأس > " ؛ " <body> " طباعة " <h2>محتوى النص المُدخل هو: $ text_content </h2> " ؛ " </body> " ؛ طباعة " </html> " ; في المتصفح، يكون تأثير التنفيذ كما يلي:
تمرير البيانات المنسدلة من خلال برنامج CGI
رمز مربع القائمة المنسدلة HTML هو كما يلي:
رمز test.html
< ! أتش تي أم أل > <أتش تي أم أل> <الرأس> < ميتا مجموعة الأحرف = " utf-8 " > <title> البرنامج التعليمي للمبرمج ( codercto.com ) </title> </ الرأس > <الجسم> < النموذج الإجراء = " /cgi-bin/test.cgi " طريقة = " نشر " الهدف = " _فارغ " > < حدد الاسم = " القائمة المنسدلة " > < خيار القيمة = " كوديرتو " محدد > البرنامج التعليمي للمبرمج </ خيار > < خيار القيمة = " google " > Google </ option > </اختر> < الإدخال اكتب = " إرسال " القيمة = " إرسال " /> </النموذج> </الجسم> </html> رمز البرنامج النصي test.cgi كما يلي:
كود test.cgi
#!/usr/bin/Perl محلي ( $buffer , @pairs , $pair , $name , $value , % FORM ) ; $ENV { ' REQUEST_METHOD ' } =~ tr / a - z / A - Z / ; ( $ENV { ' REQUEST_METHOD ' } مكافئ " بريد " ) { قراءة ( STDIN , $buffer , $ ENV { ' CONTENT_LENGTH ' } ) } else { $ buffer = $ENV { ' QUERY_STRING ' } ; # قراءة معلومات زوج الاسم/القيمة @pairs = Split ( /&/, $ buffer ) ; $زوج ( @أزواج ) { ( $ name , $ value ) = تقسيم ( / = / , $ pair ) ; $ value = ~ tr / + / / ; ) / على سبيل المثال $ FORM { $name } = $ value ; $site = $FORM { dropdown } ؛ طباعة " نوع المحتوى: نص/html r n r n " ; " <html> " طباعة " <الرأس> " ؛ طباعة ' <meta
charset ="utf-8"> ' ; ' <title>البرنامج التعليمي
للمبرمج (codercto.com)</title> ' ; " < /الرأس > " ؛ " <body> " طباعة " <h2>موقع الويب المحدد هو: $ site </h2> " ; " </body> " ؛ طباعة " </html> " ; في المتصفح، يكون تأثير التنفيذ كما يلي:
استخدام ملفات تعريف الارتباط في CGI
أحد العيوب الكبيرة في بروتوكول http هو أنه لا يحكم على هوية المستخدم، مما يسبب إزعاجًا كبيرًا للمبرمجين، ويعوض ظهور وظيفة ملفات تعريف الارتباط عن هذا النقص.
تقوم ملفات تعريف الارتباط بكتابة بيانات التسجيل على القرص الصلب الخاص بالعميل من خلال متصفح العميل عندما يصل العميل إلى البرنامج النصي، ويتم استرداد معلومات البيانات في المرة التالية التي يصل فيها العميل إلى البرنامج النصي، وبالتالي يتم تحقيق وظيفة تمييز الهوية غالبًا ما تستخدم ملفات تعريف الارتباط في التحقق من الهوية.
بناء جملة ملفات تعريف الارتباط
يتم إرسال ملفات تعريف الارتباط http من خلال رؤوس http، والتي تكون أقدم من نقل الملفات. يكون بناء جملة رأس ملف تعريف الارتباط كما يلي:
تعيين ملف تعريف الارتباط: الاسم = الاسم؛ انتهاء الصلاحية = التاريخ؛ المسار = المسار؛ المجال = المجال؛ آمن
name=name: يجب تعيين قيمة ملف تعريف الارتباط (لا يمكن للاسم استخدام " ; " و " , ") استخدم " ; " لفصل قيم الأسماء المتعددة، على سبيل المثال: name1=name1;name2=name2;name3=name3 .
انتهاء الصلاحية = التاريخ: فترة صلاحية ملف تعريف الارتباط، التنسيق: انتهاء الصلاحية = "Wdy,DD-Mon-YYYY HH:MM:SS"
المسار = المسار: قم بتعيين المسار الذي تدعمه ملفات تعريف الارتباط. إذا كان المسار مسارًا، فسيصبح ملف تعريف الارتباط ساريًا على جميع الملفات والأدلة الفرعية في هذا الدليل، على سبيل المثال: المسار = "/cgi-bin/". سيكون ملف تعريف الارتباط فعالاً ويشير إلى سريان مفعوله على هذا الملف، على سبيل المثال: path="/cgi-bin/cookie.cgi".
domain=domain: اسم النطاق الفعال لملفات تعريف الارتباط، على سبيل المثال: domain="www.codercto.com"
آمن: إذا تم إعطاء هذه العلامة، فهذا يعني أنه لا يمكن تمرير ملف تعريف الارتباط إلا من خلال خادم https مع بروتوكول SSL.
يتم استلام ملفات تعريف الارتباط عن طريق تعيين متغير البيئة HTTP_COOKIE، ويمكن لبرامج CGI الحصول على معلومات ملف تعريف الارتباط عن طريق استرداد هذا المتغير.
إعدادات ملفات تعريف الارتباط
يعد إعداد ملفات تعريف الارتباط أمرًا بسيطًا للغاية، حيث سيتم إرسال ملف تعريف الارتباط بشكل منفصل في رأس http. يقوم المثال التالي بتعيين معرف المستخدم وكلمة المرور وانتهاء الصلاحية في ملفات تعريف الارتباط:
مثال
#!/usr/bin/Perl مطبعة " Set-Cookie:UserID=XYZ; n " ; " Set-Cookie:
Password =XYZ123; n " ; " Set-Cookie:Expires=Tuesday, 31-Dec-2017 23:12:40 GMT " ; n " ; print " Set - Cookie : Domain = www .com ; n " ;print " Set - Cookie : Path =/ Perl ; n " ;print " نوع المحتوى : نص / html r n r n " ;....... محتوى HTML آخر ابحث عن ملفات تعريف الارتباط
صفحة استرجاع معلومات ملفات تعريف الارتباط بسيطة للغاية. يتم تخزين معلومات ملفات تعريف الارتباط في متغير بيئة CGI HTTP_COOKIE.
مثال
#!/usr/bin/Perl $ rcvd_cookies = $ ENV { ' HTTP_COOKIE ' } ; @cookies = Split / , $ rcvd_cookies ; ملف تعريف الارتباط $ ( @ملفات تعريف الارتباط ) { ( $key , $val ) = تقسيم ( /=/, $cookie ) # تقسيمات على
الأول =. $ key = ~ s / ^ s + // ; $ val = ~ s / ^ s + // ; /؛ لو ( مفتاح $ مكافئ " معرف المستخدم " ) { $user_id = $val } elsif ( $ key مكافئ " كلمة المرور " ) { كلمة المرور $ = $val } } مطبعة " معرف المستخدم = $ user_id n " ; " كلمة المرور = $password n " ; نتيجة الإخراج للمثال أعلاه هي:
معرف المستخدم = XYZPassword = XYZ123
وحدة CGI
توفر لغة Perl العديد من وحدات CGI المضمنة، ويتم استخدام الوحدتين التاليتين بشكل شائع:
وحدة CGI
بيركلي CGI-lib.pl