سؤال

لدي شرط لزر تسجيل الدخول الصريح للمستخدمين في تطبيق ASP.NET على الويب. أنا أستخدم IIS6 مع المصادقة الأساسية (SSL). يمكنني إعادة التوجيه إلى صفحة ويب أخرى ولكن المتصفح يبقي الجلسة حية. لقد غوغل حولها ووجدت طريقة للقيام بذلك عن طريق تمكين تحكم X نشط للتواصل مع IIS وقتل الجلسة. أنا في بيئة مقيدة لا تتيح مصادقة النماذج وعدم وجود عناصر تحكم X النشطة أيضًا. هل كان لدى أي شخص آخر هذا المطلب وكيف تعاملت معه؟

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

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

المحلول

كنت أعاني من هذا بنفسي لبضعة أيام.

باستخدام IE محدد "document.execCommand('ClearAuthenticationCache');"ليس للجميع خيارًا جيدًا: 1) إنه يمسح جميع بيانات الاعتماد ، مما يعني أن المستخدم سوف يتم تسجيله أيضًا على سبيل المثال من Gmail الخاص به أو أي موقع ويب آخر حيث يتم مصادقته حاليًا 2) إنه IE فقط ؛)

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

response.StatusCode = 401;
response.Status = "401 Unauthorized";
response.AddHeader("WWW-Authenticate", "BASIC Realm=my application name");
resp.End();

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

الحيلة لحل هذا هي دائمًا البصق "عالم" فريد من نوعه. ثم لا يقوم المتصفح بإعادة تقديم بيانات الاعتماد في الحالة الموضحة أعلاه. اخترت أن أبصق التاريخ والوقت الحاليين.

response.StatusCode = 401;
response.Status = "401 Unauthorized";
string realm = "my application name";                
response.AddHeader("WWW-Authenticate", string.Format(@"BASIC Realm={0} ({1})", realm, DateTimeUtils.ConvertToUIDateTime(DateTime.Now)));
resp.End();

شيء آخر عليك القيام به هو إخبار المتصفح بعدم تخزين الصفحة:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetNoStore();

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

نصائح أخرى

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

هل حاولت الاتصال بالاتصال. abandon ردًا على النقر على الزر؟

يحرر:

يبدو أن هذه مشكلة زر الخلفية الكلاسيكية.

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

فقط عندما يحاولون التنقل في مكان ما في تلك النافذة ، سيتضح أن جلستهم قد ولت.

تقوم العديد من المتصفحات بتطبيق زر العودة بطريقة مماثلة (وإن لم تكن متطابقة). العودة إلى الصفحة السابقة ليست بالضرورة التنقل لوجهة نظر HTML/HTTP.

هذا هو الحل لهذه المشكلة التي تعمل في IE6 وأعلى.

<asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="logout();">LinkButton</asp:LinkButton>


<script>

    function logout()
    {
    document.execCommand("ClearAuthenticationCache",false);
    }
 </script>

وجدت هذا منhttp://msdn.microsoft.com/en-us/library/bb250510٪28vs.85٪29.aspx

فريق الويب باختصار بيانات الاعتماد الخاصة بك ، من فضلك

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

ج: هذه ميزة مطلوبة بشكل متكرر لفريق Internet Explorer ، وقد منحنا الأشخاص الطيبين هناك طريقة للقيام بذلك في Internet Explorer 6.0 SP1. كل ما عليك فعله هو استدعاء طريقة execcommand على المستند ، ويمر في ClearAuthenticationCache كمعلمة الأوامر ، مثل هذا:

document.execCommand("ClearAuthenticationCache");

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

لقد وضعت هذا على زر LOGOUT Link ويعمل في IE6 SP1 وأعلى:

OnClientClick="document.execCommand('ClearAuthenticationCache');"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top