سؤال

ولدي برنامج Java الذي يمتد داخل صفحة aspx مصادقة النماذج. في النسخة .NET Framework 1.1 من موقعي، التطبيق الصغير لديه حق الوصول إلى ملف تعريف ارتباط جلسة وقادر على استرداد الملف من الخادم، ولكن في النسخة الصافي 2.0 فشل في المصادقة.

ولقد رأيت بضعة المشاركات في المنتدى مكان آخر أن الدولة التي 2.0 مجموعات الكوكيز لHttpOnly افتراضيا، ولكن الحلول نظرا لم تنجح بالنسبة لي حتى الآن. كما أنني قرأت في مكان ما أن 2.0 قد يكون التمييز على أساس عامل المستخدم.

هل لديها أي خبرة أو نظرة ثاقبة هذا؟

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

المحلول

وهذه مسألة قديمة، ولكن أنا أحسب أنها كانت قيمة أن يكون الجواب الصحيح هنا.

وفيليب هو الخلط من جانب الخادم جافا مع العميل جافا. وهو الصحيح الذي لا يمكن مشاركة الجلسات بين منصتين من جانب الخادم، مثل جافا (J2EE) و ASP.Net دون استخدام نهج مخصصة.

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

والحل هو إيقاف الرمز HttpOnly عن دورته الكوكيز. في حين قد تكون قادرة على القيام بذلك في التكوين في إصدارات أحدث من ASP.Net، في الإصدارات السابقة كان الحل لإضافة التعليمات البرمجية التالية إلى ملف Global.asax الخاص بك:

protected void Application_EndRequest(object sender, EventArgs e)
{
    /**
    * @note Remove the HttpOnly attribute from session cookies, otherwise the 
    *      Java applet won't have access to the session. This solution taken
    *      from
    *      http://blogs.msdn.com/jorman/archive/2006/03/05/session-loss-after-migrating-to-asp-net-2-0.aspx
    *
    *      For more information on the HttpOnly attribute see:
    *
    *      http://msdn.microsoft.com/netframework/programming/breakingchanges/runtime/aspnet.aspx
    *      http://msdn2.microsoft.com/en-us/library/system.web.httpcookie.httponly.aspx
    */
    if (Response.Cookies.Count > 0)
    {
        foreach (string lName in Response.Cookies.AllKeys)
        {
            if (lName == FormsAuthentication.FormsCookieName || 
                lName.ToLower() == "asp.net_sessionid")
            {
                Response.Cookies[lName].HttpOnly = false;
            }
        }
    }
}

لاحظ أنه حتى مع هذا الإصلاح، وليس كل متصفح / OS / مجموعات جافا يمكن الوصول إلى ملفات تعريف الارتباط. أنا حاليا البحث في مشكلة مع جلسة الكوكيز لا يجري الوصول إليها على فايرفوكس 4.0.1 مع جافا 1.6.0_13 على نظام التشغيل Windows XP.

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

نصائح أخرى

وفيليب على حد سواء الصحيح وغير الصحيح، على الأقل WRT إلى جاوة وASP.NET. برنامج صغير يمكن الحصول على دورة ASP.NET عن طريق الغش. في حالتي، واضاف نحن معرف جلسة العمل كمعلمة إلى التطبيق الصغير، الذي ثم يضيف التطبيق الصغير كما الكعكة في الطلبات التي و. يبدو للعمل طيب. (نحن تشفير معرف جلسة لإحباط تلك مقرفة الشعبية القراصنة!)

والجواب فيليب ليست صحيحة تماما. ركضت برنامج على شم رؤوس HTTP على محطة عمل بلدي، ولا برنامج Java في الواقع يقدم تذكرة المصادقة ASP.NET في بعض الظروف - فقط لا يعتمد عليه يكفي لاحتياجاتي

وأخيرا لم أجد حلا لهذه، لكنها لم كليا حل مشكلتي. يمكنك إضافة إدخال إلى الملف web.config في .NET Framework 2.0: <httpCookies httpOnlyCookies="false" />. ولكن لم يكن هذا العمل لجميع المستخدمين.

والحل على المدى الطويل تبين أن تعديل برنامج Java بحيث لا تحتاج إلى استرداد أي شيء من خادم الويب.

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

.

ويمكن للمرء أن يجد حلا رائعا دمج اياكس يدعو إلى المنطق الصغير، ويفوض إلى متصفح الأمن.

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