مشاركة ملفات تعريف ارتباط جلسة ASP.NET مع تطبيق Java صغير

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

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

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

3

4 إجابة

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

Filip هو مربك Java server-side مع Java من جانب العميل. أنه صحيح أنه لا يمكنك مشاركة جلسات العمل بين منصتي جانب الخادم ، مثل Java (J2EE) و ASP.Net دون استخدام أسلوب مخصص.

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

الحل هو إيقاف تشغيل علامة 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/Java إلى ملفات تعريف الارتباط. أنا حاليًا أبحث عن مشكلة في ملفات تعريف الارتباط للجلسة لا يمكن الوصول إليها على Firefox 4.0.1 مع Java 1.6.0_13 على نظام التشغيل Windows XP.

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

5
وأضاف

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

1
وأضاف

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

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

0
وأضاف

إجابة فيليب ليس صحيحًا تمامًا. شغلت برنامجًا لتحصيل رؤوس HTTP على محطة العمل الخاصة بي ، وفي الواقع يقدم Java applet بطاقة مصادقة ASP.NET في بعض الحالات - ليس كافياً بشكل كاف لاحتياجاتي.

Eventually I did find a solution to this, but it didn't entirely solve my problem. You can add an entry to the web.config in .NET 2.0: ; but this didn't work for all my users.

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

0
وأضاف