تمر هياكل البيانات بيرل كسلاسل GET تسلسل إلى برنامج بيرل CGI

StackOverflow https://stackoverflow.com/questions/1812783

  •  06-07-2019
  •  | 
  •  

سؤال

وأريد أن يمر بنية بيانات بيرل تسلسل كمتغير GET إلى تطبيق CGI. حاولت البيانات :: مسلسل كخيار أول بلدي. للأسف سلسلة متسلسلة طويلة جدا لبلدي الراحة، بالإضافة إلى تحتوي على خيارات انضم اليهم '^' (أ الإقحام).

هل هناك طريقة يمكنني إنشاء سلاسل المشفرة قصيرة من هياكل البيانات بيرل لدرجة أنني يمكن أن تمر عليها بسلام والحصول على المتغيرات إلى تطبيق CGI بيرل؟

وأود أيضا أن نقدر يقال أن هذا (المتسلسلة، سلاسل المشفرة) هو وسيلة سيئة لتمرير هياكل البيانات المعقدة إلى تطبيقات الويب واقتراحات بشأن كيف يمكن تحقيق ذلك

هل كانت مفيدة؟

المحلول

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

use Digest::SHA qw(sha1_base64);
my $base_url = 'http://example.com/thing.cgi';

my $email = 'guy@somewhere.com';
my $msg_id = '123411';

my $secret = 'mysecret';
my $data = join(":", $email, $msg_id, $secret);
my $digest = sha1_base64($data);

my $url = $base_url . '?email=' . $email . '&msg_id=' . $msg_id' . '&sign=' . $digest;

وثم إرساله على طول.

في السيناريو الخاص بك "thing.cgi" تحتاج فقط لاستخراج المعلمات ومعرفة ما إذا كان هضم المقدمة في البرنامج النصي يطابق احد منكم تجديد محليا (باستخدام البريد الإلكتروني $ و $ msg_id، وبطبيعة الحال لديك $ سره). إذا كانت لا تطابق، لا تأذن لهم، إذا لم يفعلوا ذلك الحين كان لديك طلب أذن مشروعة.

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

نصائح أخرى

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

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

وفاة تسلسل سلاسل المشفرة هو وسيلة سيئة لتمرير هياكل البيانات المعقدة إلى تطبيقات الويب.

إذا كنت تحاول تمرير الدولة من صفحة إلى أخرى، يمكنك استخدام الخادم التي لا تتطلب سوى لك بالمرور حول مفتاح الدورة.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top