2008-09-20 16 views
10

मैं एक फ्लैश मूवी के भीतर एक ही डोमेन के लिए कुकी मानों को पकड़ना चाहता हूं। क्या यह संभव है?मैं फ्लैश के भीतर कुकीज़ कैसे एक्सेस करूं?

चलिए देखते हैं कि मैंने उपयोगकर्ता को एक परिवर्तनीय foo सेट करने दिया है और मैं इसे किसी भी वेब प्रोग्रामिंग भाषा का उपयोग करके संग्रहीत करता हूं। मैं उस भाषा के माध्यम से इसे आसानी से एक्सेस कर सकता हूं, लेकिन मैं इसे फ्लैश मूवी के माध्यम से HTML पृष्ठ के भीतर प्रिंट करके इसे एक्सेस करना चाहता हूं।

उत्तर

11

तुम सिर्फ स्टोर और डेटा प्राप्त करना चाहते हैं, तो आप शायद SharedObject वर्ग का उपयोग करना चाहते। इसके बारे में अधिक जानकारी के लिए Adobe's SharedObject reference देखें।

यदि आप HTTP कुकीज़ तक पहुंचना चाहते हैं, तो आपको जावास्क्रिप्ट से बात करने के लिए बाहरी इंटरफेस का उपयोग करना होगा। जिस तरह से हम यहां करते हैं वह एक सहायक वर्ग है जिसे HTTPCookies कहा जाता है।

HTTPCookies.as:

import flash.external.ExternalInterface; 

public class HTTPCookies 
{ 
    public static function getCookie(key:String):* 
    { 
     return ExternalInterface.call("getCookie", key); 
    } 

    public static function setCookie(key:String, val:*):void 
    { 
     ExternalInterface.call("setCookie", key, val); 
    } 
} 

आप अपने फ्लैश वस्तु में 'allowScriptAccess' पैरामीटर का उपयोग कर जावास्क्रिप्ट सक्षम सुनिश्चित करने की आवश्यकता।

तो फिर तुम

HTTPCookies.js (quirksmode.org करने के लिए धन्यवाद के साथ) के रूप में, जावास्क्रिप्ट काम करता है, getCookie और setcookie की एक जोड़ी बनाने की जरूरत:

function getCookie(key) 
{ 
    var cookieValue = null; 

    if (key) 
    { 
     var cookieSearch = key + "="; 

     if (document.cookie) 
     { 
      var cookieArray = document.cookie.split(";"); 
      for (var i = 0; i < cookieArray.length; i++) 
      { 
       var cookieString = cookieArray[i]; 

       // skip past leading spaces 
       while (cookieString.charAt(0) == ' ') 
       { 
        cookieString = cookieString.substr(1); 
       } 

       // extract the actual value 
       if (cookieString.indexOf(cookieSearch) == 0) 
       { 
        cookieValue = cookieString.substr(cookieSearch.length); 
       } 
      } 
     } 
    } 

    return cookieValue; 
} 

function setCookie(key, val) 
{ 
    if (key) 
    { 
     var date = new Date(); 

     if (val != null) 
     { 
      // expires in one year 
      date.setTime(date.getTime() + (365*24*60*60*1000)); 
      document.cookie = key + "=" + val + "; expires=" + date.toGMTString(); 
     } 
     else 
     { 
      // expires yesterday 
      date.setTime(date.getTime() - (24*60*60*1000)); 
      document.cookie = key + "=; expires=" + date.toGMTString(); 
     } 
    } 
} 

एक बार जब आप में HTTPCookies.as है आपके फ्लैश प्रोजेक्ट, और HTTPCookies.js आपके वेब पेज से लोड किए गए हैं, तो आप HTTP कुकीज प्राप्त करने या सेट करने के लिए अपनी फ्लैश मूवी के भीतर getCookie और setCookie को कॉल करने में सक्षम होना चाहिए।

यह केवल बहुत ही सरल मूल्यों - तारों या संख्याओं के लिए काम करेगा - लेकिन कुछ भी जटिल के लिए आपको वास्तव में SharedObject का उपयोग करना चाहिए।

+0

फ्लैश कोड वास्तव में जेएस getCookie() कॉल के लौटा मूल्य कैसे प्राप्त करता है? आपके एएस कोड में कोई रिटर्न स्टेटमेंट नहीं है। क्या यह सिर्फ बाहरी इंटरफेस कॉल का परिणाम लौटाएगा? – Herms

+0

अच्छा बिंदु - तय। धन्यवाद! – Simon

0

मेरा मानना ​​है कि फ्लैश ऑब्जेक्ट्स जावास्क्रिप्ट के माध्यम से कार्य करने योग्य हैं, इसलिए यदि कोई आसान तरीका नहीं है, तो आप कम से कम जावास्क्रिप्ट ऑनलोड हैंडलर का उपयोग कर सकते हैं और बाहर से अपने फ्लैश ऐप में document.cookie पास कर सकते हैं।

अधिक यहाँ जानकारी: http://www.permadi.com/tutorial/flashjscommand/

0

आप पढ़ सकते हैं और फ्लैश से कुकीज़ (लोकल शेयर्ड ऑब्जेक्ट) लिख सकते हैं। फ्लैश कुकीज़ आपके पीसी पर आपके डोमेन के नाम से निर्देशिका में संग्रहीत की जाती है। उन निर्देशिकाओं पर स्थित हैं:

[Root drive]:\Documents and Settings\[username]\Application Data\Macromedia\Flash Player\#SharedObjects\ 

यह article एडोब से एक अच्छी शुरुआत है।

+1

ध्यान दें कि साझा ऑब्जेक्ट्स * कुकीज़ * नहीं हैं, वे उतनी ही कम काम करते हैं, लेकिन साझा ऑब्जेक्ट फ़्लैश विशिष्ट हैं। – grapefrukt

0

कुछ Googling से पता चलता है कि यह query strings का उपयोग करके किया जा सकता है:

वेब अनुप्रयोगों के लिए, आप url पैरामीटर द्वारा swf करने के लिए मान प्रदान कर सकते हैं, और (swf अंदर कार्रवाई स्क्रिप्ट के साथ) उन्हें बचाने के सैंडबॉक्स

0

कुकीज़.cookie के माध्यम से जावास्क्रिप्ट के लिए कुकीज़ उपलब्ध हैं - जावास्क्रिप्ट फ़ंक्शन को कॉल करने के लिए फ़्लैश के getURL का उपयोग करने का प्रयास करें।

getURL('javascript:document.cookie = "varname=varvalue; expires=Thu, 2 Aug 2001 20:47:11 UTC; path="');

0

HTTPCookies.as में getCookie विधि "वापसी" कथन का उपयोग करना चाहिए।

import flash.external.ExternalInterface; 
public class HTTPCookies 
{  
    public static function getCookie(key:String):* 
    { 
     return ExternalInterface.call("getCookie", key);  
    } 
    public static function setCookie(key:String, val:*):void 
    { 
     ExternalInterface.call("setCookie", key, val);  
    } 
}