سؤال

لدي الرئيسية asp.net التطبيق الذي هو مكتوب في asp.net 1.1.التشغيل تحت الطلب عدة 2.0 التطبيقات.تماما خروج المستخدم هل يمكنني الخروج من 1.1 التطبيق مع FormsAuthentication.سينوت أو هو أكثر تعقيدا من ذلك ؟

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

المحلول

ما كنت تبحث القيام يسمى علامة واحدة على واحد يوقع.هناك اختلافات على أساس مدى لديك تطبيقات اقامة.سأحاول توضيح أين تلك الاختلافات تأتي في اللعب.

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

<authentication mode="Forms">
    <forms name=".cookiename"
           loginUrl="~/Login.aspx" 
           timeout="30" 
           path="/" />
</authentication>

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

<machineKey validationKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902"
            encryptionKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902F8D923AC"
            validation="SHA1" />

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

protected void Login(string userName, string password)
{
    System.Web.HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName, False);
    cookie.Domain = "domain1.com";
    cookie.Expires = DateTime.Now.AddDays(30);
    Response.AppendCookie(cookie);
}

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

protected void Logout(string userName)
{
    System.Web.HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName, False);
    cookie.Domain = "domain1.com";
    cookie.Expires = DateTime.Now.AddDays(-1);
    Response.AppendCookie(cookie);
}

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

نصائح أخرى

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

هذا العمل بالنسبة لي:

في خروج الحدث بدلا من FormsAuthentication.GetAuthCookie طريقة استخدام ملفات تعريف الارتباط جمع في وجوه الطلب على النحو التالي:

HttpCookie cookie = Request.Cookies.Get(otherSiteCookieName);
cookie.Expires = DateTime.Now.AddDays(-1);
HttpContext.Current.Response.Cookies.Add(cookie);

بالطبع هذا يتطلب u معرفة اسم ملف تعريف الارتباط من موقع(ق) التي تريد المستخدم تسجيل الخروج - أي ومع ذلك لن يكون مشكلة إذا كنت تستخدم نفس ملف تعريف الارتباط عبر جميع تطبيقات الويب.

أنا أفضل أن استخدام شبكة الإنترنت.التكوين

<authentication mode="Forms">
    <forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" />
</authentication>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top