لماذا لا إغلاق علامة التبويب حذف الكوكيز?

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

  •  03-07-2019
  •  | 
  •  

سؤال

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

إذا قمت بإغلاق المتصفح ، الدورة يتم حذف ملفات تعريف الارتباط ، فلماذا لا إغلاق علامة التبويب إلى نفس النتيجة ؟

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

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

المحلول

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

وأنا لست على علم من يد أي وسيلة حقيقية حول ذلك.

نصائح أخرى

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

جلسة ينتهي عند آخر نافذة المتصفح يغلق.إذا كنت تريد شيئا آخر،:

  1. لا أريد الدورات ؛
  2. تحتاج لجعل الخاص بك "ميني جلسة" البنية التحتية ؛
  3. ربما في عالم من الألم و الحشرات.

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

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

ولقد وجدت عمل حول.

وأنا أعمل في ASP.NET C#. لدي Master Page لجميع صفحات الموقع إلا للصفحة Login. في Master Page Page Load event سيفر أحصل على Url الصفحة اشارة ومعرفة ما اذا كان يحتوي جذر الموقع، إن لم يكن I إعادة توجيه إلى صفحة Login ونظرا لأنه لم يكن لديك هذا Master Page فإنه يعرض.

وهذا يعمل إذا كنت في محاولة للحصول على صفحة من موقع آخر أو إذا كان لي أن أدخل Url إلى مربع عنوان المتصفح. حتى إذا قمت بإغلاق التبويب ومحاولة إعادة إدخال من علامة تبويب أخرى أو إعادة فتح علامة التبويب، حتى مع ولم يقتل الكوكي لا يمكنك إعادة إدخال الموقع دون المرور من خلال Login. هذا يعمل أيضا حتى لو لم تكن قد أغلقت التبويب والتنقل الخاصة بك بين مواقع مختلفة في نفس التبويب.

وهذا هو رمز

   if (Request.UrlReferrer == null || !Request.UrlReferrer.AbsoluteUri.ToString().Contains("root"))
        {
            Response.Redirect("~/Account/Login.aspx");
        }

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

إذا كنت تريد أن تتأكد بالإضافة إلى ذلك يمكنك قتل الدورة وتعريف الارتباط المصادقة في هذا البند if قبل redircting إلى صفحة Login.

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

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

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