سؤال

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

وLogouts، ومع ذلك، هي اصعب قليلا، وإلا 'الخروج' ينقر المستخدم على السماح لنا أن نعرف بشكل واضح انهم ترك الحل يحصل hairier (وعدد المرات التي يمكن للمستخدمين حقا انقر خروج؟ ). يمكن للمرء إمكانية (فقط من حيث تتبع الوقت الإجمالي على الموقع) أن يكون لتسجيل كل pageload في قاعدة البيانات وربطها مع المستخدم الذي تحميله. المشكلة مع ذلك هو أن الموقع هو موقع تسليم شريط الفيديو القائمة على العضوية (وليس ما كنت أفكر!) ومشاهدة صفحة الآخيرة من المرجح ستكون الفيديو عشرين أو ثلاثين دقيقة. نحن بحاجة لالتقاط تلك الفترة قضى على تلك الصفحة الماضية، وكذلك - وليس فقط في الوقت تم تحميله

ولقد فكرت في اثنين من الحلول الممكنة، لا هذا ولا ذاك الذي هو كل ما أنيقة. سوف يكون أول لاعتراض كافة الأحداث "تفريغ" عبر جافا سكريبت وتسجيل مكالمة إلى 'logout.php "(هذا على افتراض مدعوم أو أيا كان لا يموت بمجرد الصفحة إلغاء تحميل)؛ المشكلة هو أن هناك صلات داخلية أيضا تسجيل الأحداث كما تفريغ، لذلك النقر على أي رابط من شأنه تسجيل المستخدم من (هل يمكن أن تحقق العلم في معالج "تفريغ"، ويتلقى كل الروابط الداخلية تعيين هذا العلم - ليس من الصعب أن تفعل حيوي، ولكن قليلا kludgy). ان النهج الآخر ينطوي على وضع فاصل زمني لتنفيذ الأمر ping DB كل 60 ثانية أو نحو ذلك، مما يتيح لنا أن نعرف أن المستخدم لا يزال على الموقع، ومن ثم القيام ببعض الرياضيات عندما سحب التاريخ المستخدم لمعرفة الطول الإجمالي لتلك الدورة . ويبدو أيضا نوع من hackish. أيضا، أي من هذه الحلول للمستخدمين العمل مع JS تعطيل.

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

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

المحلول

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

والآن هل يمكن تحسين هذا قليلا قبل وضع طلب اياكس في جهاز توقيت في كل صفحة (ربما مرة أو مرتين في الدقيقة) لتقديم "نبض القلب"، ولكن هذا له بعض المحاذير أيضا: أنت بحاجة للتأكد من والدورة لا يزال الوقت في النهاية وكنت لا تزال غير مضمونة أن المستخدم لن تمنع هذه الطلبات، وربما عن طريق تعطيل جافا سكريبت.

نصائح أخرى

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

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

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