जावा एप्लेट के साथ एएसपी.NET सत्र कुकीज़ साझा करना

मेरे पास जावा ऐपलेट है जो फॉर्म-प्रमाणीकृत एएसपीएक्स पेज के अंदर चलता है। मेरी साइट के .NET 1.1 संस्करण में, एप्लेट के पास सत्र कुकी तक पहुंच है और सर्वर से फ़ाइल पुनर्प्राप्त करने में सक्षम है, लेकिन .NET 2.0 संस्करण में यह प्रमाणित करने में विफल रहता है।

मैंने कहीं और फ़ोरम पोस्ट्स देखी हैं जो बताती हैं कि 2.0 डिफ़ॉल्ट रूप से कुकीज़ को सेट करता है, लेकिन दिए गए समाधानों ने अब तक मेरे लिए काम नहीं किया है। मैंने कहीं भी पढ़ा है कि 2.0 उपयोगकर्ता-एजेंट के आधार पर भेदभाव कर सकता है।

क्या किसी के पास इसका कोई अनुभव या अंतर्दृष्टि है?

3

4 उत्तर

यह सवाल पुराना है, लेकिन मुझे लगा कि यह सही जवाब देने के लिए मूल्यवान था।

फिलिप क्लाइंट-साइड जावा के साथ सर्वर-साइड जावा को भ्रमित कर रहा है। वह सही है कि आप एक कस्टम दृष्टिकोण का उपयोग किये बिना जावा (जे 2 ईई) और एएसपी.Net जैसे दो सर्वर-साइड प्लेटफार्मों के बीच सत्र साझा नहीं कर सकते हैं।

हालांकि, एप्लेट क्लाइंट-साइड हैं और इसलिए होस्ट पेज की सत्र जानकारी तक पहुंचने में सक्षम होना चाहिए। मुद्दा यह है कि एएसपी.Net 2.0 ने सत्र कुकीज़ पर केवल झंडा जोड़ा। यह ध्वज जावास्क्रिप्ट और जावा एप्लेट को इन कुकीज़ तक पहुंचने से रोकता है।

कामकाज सत्र कुकीज़ पर केवल झंडा बंद करने के लिए है। जबकि आप एएसपी.Net के नए संस्करणों में कॉन्फ़िगरेशन में ऐसा करने में सक्षम हो सकते हैं, पिछले संस्करणों में समाधान आपके ग्लोबल.एक्सएक्स फ़ाइल में निम्न कोड जोड़ना था:

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;
            }
        }
    }
}

ध्यान दें कि इस फिक्स के साथ भी, सभी ब्राउज़र/ओएस/जावा संयोजन कुकीज तक नहीं पहुंच सकते हैं। मैं वर्तमान में विंडोज़ XP पर जावा 1.6.0_13 के साथ फ़ायरफ़ॉक्स 4.0.1 पर सत्र कुकीज के साथ एक समस्या का शोध नहीं कर रहा हूं।

कामकाज का उपयोग डॉ। पिताजी के दृष्टिकोण का उपयोग करना है, जहां सत्र आईडी को पैरामीटर के रूप में एप्लेट में पास किया जाता है, और उसके बाद अनुरोध URL में एम्बेड किया जाता है (सर्वर-साइड कॉन्फ़िगरेशन में URL सत्रों को चालू करने की आवश्यकता होती है) या मैन्युअल रूप से सेट कुकी के रूप में भेजा गया।

5
जोड़ा

फिलिप जावा और एएसपी.नेट पर कम से कम wrt दोनों सही और गलत है। एक एप्लेट धोखाधड़ी से एएसपी.NET सत्र तक पहुंच प्राप्त कर सकता है। मेरे मामले में, हमने ऐपलेट को पैरामीटर के रूप में सत्र आईडी जोड़ा, जिसे एप्लेट इसके अनुरोध में कुकी के रूप में जोड़ता है। ठीक काम करने लगता है। (हमने सत्र आईडी को उन बुरा हैकर लोगों को फेंकने के लिए एन्क्रिप्ट किया!)

1
जोड़ा

मुझे पता है कि यह बहुत देर हो चुकी जवाब हो सकता है, लेकिन मैं आपको एक आसान समाधान दे सकता हूं: - आमतौर पर, हमेशा नहीं, एप्लेट्स अपने इंटरफेस और इंटरैक्शन के लिए एचटीएमएल और जावास्क्रिप्ट का भारी उपयोग करते हैं। - जावास्क्रिप्ट ब्राउज़र में चलाया जाता है। - ब्राउज़र द्वारा अजाक्स कॉल किए जाते हैं। - अजाक्स कॉल एसिंक्रोनस हैं और इसे एप्लेट्स लॉजिक में आसानी से एकीकृत किया जा सकता है।

एक अजाक्स को एक एप्लेट के तर्क में कॉल करने के लिए एक सुरुचिपूर्ण समाधान मिल सकता है, जो ब्राउज़र को सुरक्षा प्रदान करता है।

0
जोड़ा

फिलिप का जवाब पूरी तरह से सही नहीं है। मैंने अपने वर्कस्टेशन पर HTTP हेडर को स्नीफ करने के लिए एक प्रोग्राम चलाया, और जावा एप्लेट वास्तव में कुछ परिस्थितियों में एएसपी.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.

दीर्घकालिक समाधान जावा एप्लेट को संशोधित करने के लिए निकला है ताकि इसे वेब सर्वर से कुछ भी प्राप्त करने की आवश्यकता न हो।

0
जोड़ा