2010-05-13 17 views
31

मेरे पास एक वेब सेवा है जिसे मैं स्क्रिप्ट से आमंत्रित करता हूं लेकिन उसे कुकीज़ में संग्रहीत किसी भी जानकारी की आवश्यकता नहीं होती है। जब भी मैं सेवा के लिए अनुरोध करता हूं, कुकी इसके साथ भेजी जाती है। मैं समझता हूं कि डिफ़ॉल्ट कुकीज़ द्वारा HTTP अनुरोध के साथ भेजा जाता है, लेकिन क्या उस व्यवहार को ओवरराइड करने और कुकी भेजने के लिए कोई रास्ता नहीं है? कह रही है कि ब्राउज़रों HTTP अनुरोध के साथ मिलान भेजें (पथ + डोमेन + सत्र) कुकीज़ मेंकुकीज़ को AJAX अनुरोध पर भेजे जाने से रोकें

$.ajax({ 
    type: "POST", 
    cache: false, 
    url: url, 
    data: data, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(response) { successFunc(response); }, 
    error: function(xhr) { errorFunc(xhr); } 
}); 

उत्तर

0

आप सही कर रहे हैं:

संक्षेप में, मैं इस तरह मेरे अनुरोध जारी करने कर रहा हूँ। कुकी तंत्र के लिए काम करना महत्वपूर्ण है।

क्या आप बस कुकीज़ नहीं पढ़ सकते थे?

इसके अतिरिक्त, जब कुकी मूल रूप से सेट की जाती है, तो आप निर्धारित कर सकते हैं कि कौन सी निर्देशिका (और इसकी उपनिर्देशिका) कुकी तक पहुंच सकती है।

उदाहरण के लिए, यदि आप कुकी को/foo/bar/में पढ़ने के लिए सेट करते हैं, तो /hhatever/ajaxHandler.php में स्थित एक फ़ाइल उन कुकीज़ को नहीं देख सकती है।

चेक इस बाहर: http://us.php.net/setcookie

जबकि मुझे यकीन है कि अगर आप PHP का उपयोग कर रहे नहीं हूँ, यह तुम्हारे लिए एक अच्छा प्रारंभिक बिंदु हो सकता है।

+5

कुकी को अनदेखा करने से बैंडविड्थ – Osseta

+1

फॉक्सट्रॉट उपभोग करने की समस्या हल नहीं होती है, मैं उत्सुक हूं कि "कुकी को न पढ़ें" से आपका क्या मतलब है। साथ ही, विशिष्ट कोणों के लिए उन्हें सेट करने के साथ अपने कोण को छूने के लिए, पूरे दायरे के लिए कुकी सेट करना संभव है लेकिन एक निश्चित निर्देशिका है? यदि ऐसा है, तो मुझे विश्वास करने के लिए कुछ देना होगा, मुझे विश्वास है। ध्यान रखें कि यह सब एक ही डोमेन में हो रहा है और उस डोमेन के पथ द्वारा प्रतिष्ठित होने की आवश्यकता होगी। मुझे नहीं पता कि कुकीज़ इसे संभाल सकती हैं। क्या किसी को पता है कि jQuery स्वयं AJAX अनुरोध के साथ कुकी भेजने की अनुमति नहीं देता है? यह मेरे लिए अंतिम समाधान होगा। =] – Simon

+1

किसी के पास हमेशा कुकी पढ़ने की पसंद नहीं होती है, उदाहरण के लिए जब दृश्य कोड चलाने से पहले एक फ्रेमवर्क पर कुकीज़ के माध्यम से प्राधिकरण को संभाला जाता है। –

15

अपने सर्वर पर कुकी-कम सबडोमेन के लिए AJAX अनुरोध भेजें। तो आप ऐप www.mydomain.com है और AJAX अनुरोध api.mydomain.com से परोसे जाते हैं जिन्हें आपने कभी कुकी पर सेट नहीं किया है। इसके अलावा एक बहुत अच्छा विचार http://developer.yahoo.com/performance/rules.html

+0

ओसेटा, कुकीज डोमेन पर बहुत अच्छी कॉल। हम वर्तमान में अन्य संसाधनों के लिए ऐसा करते हैं जैसे कि हमारी सभी स्थिर फाइलें। मुझे इस वेब सेवा पर थोड़ा और विस्तार करने की आवश्यकता है। यह अकेले नहीं है और एक उपनिर्देशिका में निहित है, इसलिए इस चर्चा के लिए मैं कहता हूं कि मैं उसी डोमेन में विधियों का आह्वान कर रहा हूं, मेरा वेब ऐप नीचे है लेकिन उप-पथ "/publicservices/service.asmx" में है। – Simon

+0

मुझे यकीन नहीं है, लेकिन मैं इस धारणा के तहत हूं कि कुकी प्रति वैश्विक डोमेन (उप) डोमेन हैं। तो वे प्रति अनुरोध आधार पर या तो बंद या बंद हैं और कॉन्फ़िगर करने योग्य नहीं हैं। – Osseta

+0

दुर्भाग्यवश, मुझे विश्वास है कि आप सही हैं। आपकी अंतर्दृष्टि के लिए बहुत बहुत धन्यवाद! – Simon

1

की धारा नहीं है, कुकी हमेशा भेजा जाएगा छवियों आदि की तरह स्थिर फाइलों के साथ यह करने के लिए ...

"अवयव के लिए उपयोग कुकी मुक्त डोमेन" देखें।

आप ब्राउज़र पर अपनी कुकीज़ कैसे भेज सकते हैं, और उन पर http ध्वज का उपयोग कर सकते हैं, जिसका अर्थ है कि उन्हें जावास्क्रिप्ट के माध्यम से नहीं भेजा जाएगा।

या (जो बहुत सी साइटें उपयोग करती हैं), एक नया सबडोमेन बनाएं जिसे आपने कभी भी कोई कुकी नहीं भेजी है।
1. जावास्क्रिप्ट (उनमें एक वैश्विक चर में बचाने के लिए)
2. जावास्क्रिप्ट के साथ अपने डोमेन के लिए कुकी हटाने के साथ अपने डोमेन के लिए ब्राउज़र से कुकी मिलती है:

6

एक और दृष्टिकोण कर $ .ajax करने से पहले किया जाएगा ब्राउज़र से
3. $ .ajax कॉल
4. ब्राउज़र में कुकीज़ (वैश्विक चर से) को वापस रखें।

यदि आपको अपने डोमेन से कुकीज़ की आवश्यकता नहीं है तो बस उन्हें हटाएं (इसलिए छोड़ें 1. और 4.)।

+0

अगर मैं आपको केवल 1000 अपवॉट दे सकता हूं ... –

+0

लगभग बिल्कुल सही ... क्योंकि कुकी को कितना रहने वाला था, इसे पुनर्स्थापित करने का कोई तरीका नहीं है। –

0

क्रॉस-उत्पत्ति AJAX कॉल के साथ वास्तव में कुकीज़ भेजने के लिए साथ-साथ क्रेडेंशियल ध्वज की आवश्यकता होती है।

देखें: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials

गलत पर यह स्थापना भेजे जाने से कुकीज़ पाएगा।

उसी मूल अनुरोध के साथ आपको यहां उल्लिखित अन्य उत्तरों का पालन करना होगा।

+0

आप इसके साथ कैसे मेल खाते हैं? _Setting withCredentials का समान साइट अनुरोधों पर कोई प्रभाव नहीं पड़ता है ._ लगभग सात साल पहले मेरे मूल प्रश्न में स्पष्ट नहीं है, यह .NET सेवा वेबसाइट में एम्बेड की गई थी (_.asmx_ सेवा साइट पर घिरे फ़ोल्डर में) । – Simon

+0

पर्याप्त मेला। मैं इसे स्पष्ट कर दूंगा कि प्रमाण-पत्र = झूठी केवल क्रॉस मूल अनुरोधों पर कुकीज़ भेजने से रोकती है। –

संबंधित मुद्दे