سؤال

أنا باستخدام بلدي مخصص المصادقة مع IIS و أريد الخادم على كل صفحة التحميل (لا يهم ما هو نوع ملف) أولا التحقق من تطبيق المتغير لمعرفة ما إذا تم مصادقة المستخدم و ترى الموقع.في العالمية.asax هذا يمكن أن يكون:

void Application_Start(Object Sender, EventArgs e)
{
  if(Application["username"] == null)
  {
    Response.redirect("login.aspx");
  }
}

المشكلة هي أن هذا الموقع قد فرعية متعددة الجذور.وهذا هو ، http://example.com/site1 هو موقع مختلف تماما من http://example.com/site2 .ولذلك أود قال Application_Start وظيفة للعمل على site1 ولكن لا تؤثر على site2.

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

ما هي البدائل هناك العالمية.asax ؟ أو يمكن العالمية.asax تكون مختلفة نوعا ما عن كل الدليل ؟

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

المحلول

تحليل HttpModules هي بديل للglobal.asax

و(انظر أيضا <لأ href = "https://www.codeguru.com/csharp/.net/net_asp/article.php/c19389/HTTP-Handlers-and-HTTP-Modules-in-ASPNET.htm" يختلط = "نوفولو noreferrer"> https://www.codeguru.com/csharp/.net/net_asp/article.php/c19389/HTTP-Handlers-and-HTTP-Modules-in-ASPNET.htm < br> و http://codebetter.com/blogs/karlseguin/archive/ 2006 / 12/06 / 146356.aspx )

يتم تسجيل

وHttpModules في الملف web.config. الذي، مريح، <م> هو تخصيص على مستوى الدليل. لذلك كل دليل يمكن أن يكون مجموعة فريدة من وحدات (موروثة في الدلائل أقل). جميع الوحدات لديها نفس الوظائف ك تلك التي وجدت في global.asax.

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

"page.aspx"    "page.html"
    |             |
(   |  module 1   |  )
(   |  module 2   |  )
(   |  module 3   |  )
    V             V
(handler 1) (handler 2)

و((صورة ووصف أفضل بكثير ويمكن الاطلاع على الموقع https://www.codeguru.com/csharp/.net/net_asp/article.php/c19389/HTTP-Handlers-and-HTTP-Modules-in -ASPNET.htm ))

وهكذا ثم كل ما عليك القيام به هو تحديد الشفرة وحدة نمطية بدلا من global.asax. إذا لم يتم مصادقة المستخدم، ثم: response.redirect("login.aspx") سيتوقف السيطرة من الوصول إلى أي وقت مضى معالج وتحليل / العودة / تشغيل الصفحة المطلوبة

وهو قليلا أكثر تعقيدا من ذلك، ولذلك فإن أفضل وصف / تعليمي يمكن العثور عليه في موقع codeguru.

نصائح أخرى

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

وفقا http://msdn.microsoft.com/en-us/library/ms178473.aspx:

"يسمى عند أول الموارد (مثل صفحة) في ASP.NET التطبيق المطلوب.على Application_Start الطريقة ودعا مرة واحدة فقط خلال دورة حياة التطبيق"

وعلاوة على ذلك وفقا http://support.microsoft.com/kb/307598#1 "تطبيق الدولة المتغيرات في واقع المتغيرات العالمية لكل ASP.NET التطبيق".

أود أن أقترح عليك استخدام المدمج في عضوية API و تقييد الوصول باستخدام شبكة الإنترنت.ملفات التكوين.

إذا كنت مفتوحة إلى استخدام عضوية API بدلا من المتداول الخاصة بك آلية المصادقة ، يمكنك استخدام شبكة الإنترنت.التكوين للتحقق مما إذا كان المستخدم مخولا للحصول على مجلد معين.يمكنك أيضا نسبيا ببساطة للمستخدم تسجيل الدخول في موقع واحد تلقائيا تسجيل الدخول إلى مواقع أخرى من خلال تبادل تذاكر مصادقة -- شريطة أن تكون في نفس المجال الجذر.

لتقاسم المصادقة تذاكر انظر:http://msdn.microsoft.com/en-us/library/ms998288.aspx و http://www.netomatix.com/development/singlesignon.aspx

كيفية استخدام شبكة الإنترنت.التكوين لتقييد الوصول:http://www.devhood.com/Tutorials/tutorial_details.aspx?tutorial_id=85

والواقع أعتقد أن هناك global.asax واحد فقط في تطبيق asp.net. إذا كنت تريد أن تكون example.com/subsite1 تطبيق مختلف من example.com/subsite2 يمكنك إنشاء اثنين من التطبيقات المختلفة في IIS. ونتيجة لذلك سوف تعمل في مجالات التطبيق المختلفة تماما (على الرغم من أنها قد تكون في نفس العملية (تكرار aspnet_wp.exe أو w3wp.exe)، وحتى تبادل تجمعات التطبيقات). على هذا النحو، لو انهم التطبيقات المختلفة التي يجب أيضا الحصول على لديك ملفات global.asax مستقلة.

لتحويل الدليل إلى تطبيق. مفتوحة IIS-> البحث في الدليل / موقع فرعي، والحق الكبرى تشكيلة متنوعة> Properties-> الرئيسية لدليل بعلامة تبويب> انقر فوق "إنشاء".

لمزيد من المعلومات حول مجالات التطبيق والعمليات المنفذة، والنظر في قراءة هذا بلوق دخول . نأمل أن يساعد.

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